SQL Server 數據庫身份認證以及包含數據庫
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.增加了遷移數據庫的復雜性。不能僅僅簡單地遷移用戶數據數據庫和程序。因為還有一部分和應用相關的對象遺漏在用戶數據庫之外,其中包括登入名。在遷移應用的時候,登入名需被單獨的從老的環境中提取出來,在部署到新的環境上。
前提是數據庫兼容級別110以上,即2012以上。包含數據庫創建。。
1 EXEC sys.sp_configure N'contained database authentication', N'1'
2 GO
3 RECONFIGURE WITH OVERRIDE
4 GO
修改[AdventureWorks2012]為包含數據庫
1 USE [master]
2 GO
3 ALTER DATABASE [AdventureWorks2012] SET CONTAINMENT = PARTIAL WITH NO_WAIT
4 GO
查詢實例中所有的包含數據庫
1 use master
2 select * from sys.databases
3 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 = 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 閱讀(251) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄