標籤:style blog http io color os ar 使用 for
首先分為SQL Server 認證與Windows 身份認證。
SQL Server 認證可以運行以下語句來查詢
1 select * from sys.sql_logins
管理員可以直接修改密碼,但無法知曉原有密碼原文,SQL Server使用混淆演算法來保護安全性不如Windows 身份認證,
Windows認證模式
首先分為本機帳號與域帳號
SQL Server 將認證和授權分散給了不同的對象來完成,SQL Server 的“登入名”(Login)用於認證,串連SQL Server 的SQL或者Windows 賬戶必須在SQL Server中有對應的登入名才能成功登入。
而每個資料庫中的“使用者”(User)被授予了操作資料庫中對象的相應許可權。登入名和使用者之間通過SID聯絡起來,於是登入SQL Server 的登入名也獲得了操作資料庫的相應許可權。
這個機制帶來以下兩個問題:
1.提高了高可用解決方案的維護成本。msdb(系統資料庫)無法被鏡像。類似製作資料庫鏡像系統,就需同時在主體和鏡像伺服器上的添加同樣的使用者名稱密碼,否則發生容錯移轉,鏡像服務就無法使用新的登入名進行登入。另外,在鏡像伺服器上添加登入名時要確保和主體伺服器上的登入名使用相同的SID,否則就會破壞登入名到資料庫使用者之間的對應關係。成為所謂的孤立賬戶。
2.增加了遷移資料庫的複雜性。不能僅僅簡單地遷移使用者資料資料庫和程式。因為還有一部分和應用相關的對象遺漏在使用者資料庫之外,其中包括登入名。在遷移應用的時候,登入名需被單獨的從老的環境中提取出來,在部署到新的環境上。
孤立賬戶解決參考以下連結
http://www.cnblogs.com/kerrycode/p/3465547.html
前提是資料庫相容層級110以上,即2012以上。包含資料庫建立。。
1 EXEC sys.sp_configure N‘contained database authentication‘, N‘1‘2 GO3 RECONFIGURE WITH OVERRIDE4 GO
修改[AdventureWorks2012]為包含資料庫
1 USE [master]2 GO3 ALTER DATABASE [AdventureWorks2012] SET CONTAINMENT = PARTIAL WITH NO_WAIT4 GO
查詢執行個體中所有的包含資料庫
1 use master2 select * from sys.databases3 where containment >0
將現有的資料庫使用者改為包含資料庫使用者
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 = 110 AND sp.is_disabled = 0;11 OPEN user_cursor12 FETCH NEXT FROM user_cursor INTO @username13 WHILE @@FETCH_STATUS = 014 BEGIN15 EXECUTE sp_migrate_user_to_contained @username = @username,16 @rename = N‘keep_name‘, @disablelogin = N‘disable_login‘;17 FETCH NEXT FROM user_cursor INTO @username18 END19 CLOSE user_cursor;20 DEALLOCATE user_cursor;
SQL Server 資料庫身份認證以及包含資料庫