SQL Server 數(shù)據(jù)庫(kù)身份認(rèn)證以及包含數(shù)據(jù)庫(kù)
SQL Server 認(rèn)證可以運(yùn)行以下語(yǔ)句來(lái)查詢
1 select * from sys.sql_logins
管理員可以直接修改密碼,但無(wú)法知曉原有密碼原文,SQL Server使用混淆算法來(lái)保護(hù)安全性不如Windows 身份認(rèn)證,
Windows認(rèn)證模式
首先分為本機(jī)賬號(hào)與域賬號(hào)
SQL Server 將認(rèn)證和授權(quán)分散給了不同的對(duì)象來(lái)完成,SQL Server 的“登入名”(Login)用于認(rèn)證,連接SQL Server 的SQL或者Windows 賬戶必須在SQL Server中有對(duì)應(yīng)的登入名才能成功登入。
而每個(gè)數(shù)據(jù)庫(kù)中的“用戶”(User)被授予了操作數(shù)據(jù)庫(kù)中對(duì)象的相應(yīng)權(quán)限。登入名和用戶之間通過(guò)SID聯(lián)系起來(lái),于是登入SQL Server 的登入名也獲得了操作數(shù)據(jù)庫(kù)的相應(yīng)權(quán)限。
這個(gè)機(jī)制帶來(lái)以下兩個(gè)問(wèn)題:
1.提高了高可用解決方案的維護(hù)成本。msdb(系統(tǒng)數(shù)據(jù)庫(kù))無(wú)法被鏡像。類似制作數(shù)據(jù)庫(kù)鏡像系統(tǒng),就需同時(shí)在主體和鏡像服務(wù)器上的添加同樣的用戶名密碼,否則發(fā)生故障轉(zhuǎn)移,鏡像服務(wù)就無(wú)法使用新的登入名進(jìn)行登入。另外,在鏡像服務(wù)器上添加登入名時(shí)要確保和主體服務(wù)器上的登入名使用相同的SID,否則就會(huì)破壞登入名到數(shù)據(jù)庫(kù)用戶之間的對(duì)應(yīng)關(guān)系。成為所謂的孤立賬戶。
2.增加了遷移數(shù)據(jù)庫(kù)的復(fù)雜性。不能僅僅簡(jiǎn)單地遷移用戶數(shù)據(jù)數(shù)據(jù)庫(kù)和程序。因?yàn)檫€有一部分和應(yīng)用相關(guān)的對(duì)象遺漏在用戶數(shù)據(jù)庫(kù)之外,其中包括登入名。在遷移應(yīng)用的時(shí)候,登入名需被單獨(dú)的從老的環(huán)境中提取出來(lái),在部署到新的環(huán)境上。
前提是數(shù)據(jù)庫(kù)兼容級(jí)別110以上,即2012以上。包含數(shù)據(jù)庫(kù)創(chuàng)建。。
1 EXEC sys.sp_configure N'contained database authentication', N'1'
2 GO
3 RECONFIGURE WITH OVERRIDE
4 GO
修改[AdventureWorks2012]為包含數(shù)據(jù)庫(kù)
1 USE [master]
2 GO
3 ALTER DATABASE [AdventureWorks2012] SET CONTAINMENT = PARTIAL WITH NO_WAIT
4 GO
查詢實(shí)例中所有的包含數(shù)據(jù)庫(kù)
1 use master
2 select * from sys.databases
3 where containment >0
將現(xiàn)有的數(shù)據(jù)庫(kù)用戶改為包含數(shù)據(jù)庫(kù)用戶
1 USE [AdventureWorks2012] 2 GO 3 DECLARE @username SYSNAME; 4 DECLARE user_cursor CURSOR 5 FOR 6 SELECT dp.name 7 FROM sys.database_principals AS dp 8 JOIN sys.server_principals AS sp ON dp.sid = sp.sid 9 WHERE dp.authentication_type = 1 10 AND sp.is_disabled = 0; 11 OPEN user_cursor 12 FETCH NEXT FROM user_cursor INTO @username 13 WHILE @@FETCH_STATUS = 0 14 BEGIN 15 EXECUTE sp_migrate_user_to_contained @username = @username, 16 @rename = N'keep_name', @disablelogin = N'disable_login'; 17 FETCH NEXT FROM user_cursor INTO @username 18 END 19 CLOSE user_cursor; 20 DEALLOCATE user_cursor; |
posted on 2014-11-18 10:05 順其自然EVO 閱讀(250) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄