Chapter 2 User Authentication, Authorization, and Security(10):建立包含資料庫,authentication
原文出處:http://blog.csdn.net/dba_huangzj/article/details/39473895,專題目錄:http://blog.csdn.net/dba_huangzj/article/details/37906349
未經作者同意,任何人不得以“原創”形式發布,也不得已用於商業用途,本人不負責任何法律責任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/39003679
前言:
在SQL Server中,安全性分為兩級:伺服器層級和資料庫層級。伺服器的登入名稱被映射到資料庫中的一個使用者。身分識別驗證在登入名稱串連到伺服器時發生。如果資料庫中有這個登入名稱所對應的使用者,那麼這個登入名稱就能訪問資料庫。登入名稱和使用者之間的映射是基於一個內部SID,當從一個伺服器複製資料庫到另外一個伺服器,即使使用者名稱相同,如果SID不同,也會打算這個串連關係。從2012開始引入了包含資料庫(Contained database)概念,用於解決這種問題。
一個包含資料庫並不依賴於任何外部定義,可以在伺服器之間自由移動而不需要任何額外配置。SQL Server的包含概念有下面3類:
- 不包含(Non-contained):資料庫基於伺服器。
- 部分包含(Partially-contained):使用者是定義在資料庫內部,資料庫是獨立的,但是依舊可以訪問資料庫外部的資源。
- 完全包含(Fully-contained):資料庫是獨立的,使用者不能訪問外部資源。
SQL Server 2012 僅支援部分包含,這個功能主要解決兩個問題:登入名稱和使用者的映射問題,還有就是暫存資料表的定序。當在包含資料庫範圍內建立一個局部暫存資料表時,CHAR/VARCHAR列的定序是按照調用的資料庫的定序而定,而不是tempdb。
準備工作:
在建立包含資料庫前,需要在執行個體層級啟用包含資料庫身分識別驗證。右鍵執行個體→【屬性】→【進階】
也可以使用T-SQL實現:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; GO EXEC sp_configure 'contained database authentication', 1; RECONFIGURE; GO sp_configure 'show advanced options', 0; RECONFIGURE; GO
這個配置也要在需要被還原的伺服器上啟用(假設你的庫需要移動到別的伺服器)。
實現:
可以按照下面步驟建立部分包含資料庫:
1. 在SSMS中右鍵【資料庫】節點,選擇【建立資料庫】
2. 在【選項】頁中選擇【包含類型】選項中的【部分】
換成T-SQL就是:
CREATE DATABASE containedDb CONTAINMENT = PARTIAL;
3. 然後,你可以建立一個資料庫裡面的使用者:
USE containedDb; CREATE USER Fred WITH PASSWORD = N'Strong Password', –SQL 身分識別驗證及密碼DEFAULT_SCHEMA = dbo; CREATE USER [DOMAIN\Fred];—Windows 身分識別驗證
4. 查看包含資料庫中的包含使用者,可以使用下面語句:
SELECT name, type_desc, authentication_type_desc FROM sys.database_principals WHERE authentication_type = 2;
5. 在DMV sys.dm_exec_sessions中會顯示使用的身分識別驗證:
SELECT session_id , login_time , login_name , DB_NAME(database_id) AS db , IIF( authenticating_database_id = 1, 'server login', QUOTENAME(DB_NAME(authenticating_database_id)) + ' user ' + QUOTENAME(original_login_name) ) AS authentication_type FROM sys.dm_exec_sessions WHERE is_user_process = 1;
原理:
包含資料庫對傳統SQL Server安全模式帶來了一些改變。在過去,僅有已授權的登入才能串連到SQL Server,現在,使用者可以獨立於任何登入,而被直接授權。其密碼是儲存在資料庫層面並可以在伺服器層面修改。如果包含資料庫使用者是一個Windows 帳號,整個帳號僅在資料庫內部有效,因為它沒有在伺服器層面有登入名稱映射。
一個包含使用者沒有預設資料庫,所以如果資料庫沒有在串連時被顯式定義將會導致串連不能建立,可以通過SSMS的串連屬性或者在應用程式中的連接字串中定義,如使用SQL Server Native Client ODBC驅動:
Driver={SQL Server Native Client 11.0};Server=SERVER\SQL2012;Database=ContainedDB;Uid=Fred;Pwd=iamaweakpassword;
在建立包含資料庫時,由於目標伺服器可能已經存在相同的登入名稱,可能導致一些安全隱患或者許可權衝突,這時候可以使用DDL觸發器應對現有資料庫的包含類型修改。詳細內容可以看下面部落格:
http://blogs.msdn.com/b/sqlsecurity/archive/2010/12/06/contained-database-authentication-how-to-control-which-databases-are-allowed-to-authenticate-users-using-logon-triggers.aspx
更多:
由於一些視圖、預存程序可能依賴於其他資料庫的表,或者同義字、伺服器層級的系統對象,所以真正的包含資料庫是很難實現的。所以SQL Server 2012中,包含資料庫是部分包含。可以從sys.dm_db_uncontained_entities 這個DMV中查詢:
SELECT e.feature_name , [object] = COALESCE(QUOTENAME(SCHEMA_NAME(o.[schema_id])) + '.' + QUOTENAME(o.[name]), QUOTENAME(SCHEMA_NAME(s.[schema_id])) + '.' + QUOTENAME(s.[name])) , [line] = COALESCE(e.statement_line_number, 0) , [statement / synonym target / route / user/login] = COALESCE(s.[base_object_name], SUBSTRING(m.[definition], e.statement_offset_begin / 2, e.statement_offset_end / 2 - e.statement_offset_begin / 2) COLLATE CATALOG_DEFAULT, r.[name], 'User : ' + p.[name] + ' / Login : ' + sp.[name]) FROM sys.dm_db_uncontained_entities AS e LEFT JOIN sys.objects AS o ON e.major_id = o.object_id AND e.class = 1 LEFT JOIN sys.sql_modules AS m ON e.major_id = m.object_id AND e.class = 1 LEFT JOIN sys.synonyms AS s ON e.major_id = s.object_id AND e.class = 1 LEFT JOIN sys.routes AS r ON e.major_id = r.route_id AND e.class = 19 LEFT JOIN sys.database_principals AS p ON e.major_id = p.principal_id AND e.class = 4 LEFT JOIN sys.server_principals AS sp ON p.[sid] = sp.[sid];
如何轉換資料庫成為包含資料庫:
可以使用下面語句把一個資料庫轉換成包含資料庫:
USE [master] GO ALTER DATABASE [marketing] SET CONTAINMENT = PARTIAL;
如果有使用者映射到SQL登入,可以使用sp_migrate_user_to_contained系統預存程序轉換包含資料庫使用者,如果需要自動化,可以查看微軟文檔:http://msdn.microsoft.com/en-us/library/ff929275.aspx ,也可以使用下面指令碼:
SELECT 'EXEC sp_migrate_user_to_contained @username = N''' + dp.name + ''', @rename = N''keep_name'', @disablelogin = N''do_not_disable_login'' ;' FROM sys.database_principals AS dp JOIN sys.server_principals AS sp ON dp.sid = sp.sid WHERE dp.authentication_type = 1 AND sp.is_disabled = 0;
下一篇:
weblogic啟動後自動關掉,是什情況?
使用者名稱密碼錯誤了,所以啟動不起來,看看你自己建的域下有沒有一個boot.properties檔案,開啟看看使用者名稱密碼是不是和你建域的時候設定的一樣,不一樣改成一樣的再啟動。或者是沒這個檔案,啟動的時候讓你輸入使用者名稱密碼,是不是輸入錯誤了。
用Windows2000server的好處
寫作文啊? 參考下面的改一改即可
Top 10 Reasons Why to Upgrade from Windows 2000 Server to Windows Server 2003 R2
Windows Server 2003 R2 builds upon the increased security, reliability, and performance provided by Windows Server 2003 Service Pack 1 (SP1) to provide a more secure and dependable platform on which to deliver business-critical applications and Web services. At the same time, Windows Server 2003 R2 is easier to manage and integrate into existing environments. This page describes the major new features and improvements included in Windows Server 2003 R2.
Centralize user authentication and authorization
Introduced in Windows 2000, the Active Directory directory service simplifies the administration of complex network directories and makes it easy to locate resources on even the largest networks. This enterprise-class service is scalable, is built on Internet-standard technologies, and integrates with the Standard, Enterprise, and Datacenter editions of Windows Server 2003 R2.
Windows Server 2003 R2 provides numerous ease-of-use improvements to Active Directory and new features, including cross-forest trusts, the ability to rename domains, and the ability to deactivate attributes and classes in the schema so that their definitions can be changed.
Simplify end user policy management
Administrators can use Group Policy to define the settings and allowed actions for your users and computers. In contrast with local policy, organizations can use Group Policy to set policies that ......餘下全文>>