簡(jiǎn)介
本白皮書面向的對(duì)象是 Microsoft SQL Server 管理員和開發(fā)人員,主要是介紹 SQL Server 2000 Service Pack 3 (SP3) 的安全功能。本文討論了安全方面的一些最佳做法,給出了詳細(xì)的建議信息,并提供了一些源代碼示例。最后,列出了安全最佳做法檢查表。本白皮書的重點(diǎn)是 SQL Server 引擎。有關(guān)復(fù)制、分析服務(wù)或數(shù)據(jù)轉(zhuǎn)換服務(wù)的詳細(xì)討論,請(qǐng)參閱 http://go.microsoft.com/fwlink/?LinkId=15402。
前提
SQL Server 2000 安全是基于 Microsoft Windows NT 4.0® 和 Windows 2000 安全模型實(shí)現(xiàn)的,因此,閱讀本白皮書的前提是讀者對(duì) Windows NT 4.0 和 Windows 2000 安全有一個(gè)基本的了解。另外一個(gè)前提就是,讀者理解域、全局組、本地組和用戶帳戶應(yīng)用于 Windows NT 4.0 安全上下文時(shí)的概念,以及 Windows 2000 中 Microsoft Active Directory ®的概念。
中國(guó)網(wǎng)管論壇bbs.bitsCN.com
對(duì)于那些對(duì)代碼示例感興趣的讀者,學(xué)習(xí) Microsoft Visual Basic® 和結(jié)構(gòu)化查詢語(yǔ)言 (SQL) 有助于增強(qiáng)理解。此外,有使用 SQL 分布式管理對(duì)象 (SQL-DMO) 的經(jīng)驗(yàn)對(duì)理解本白皮書中的內(nèi)容也大有好處。
但是,即便是那些對(duì) Windows NT 4.0、Windows 2000 或 SQL Server 知之甚少的讀者,通過閱讀本文,也將對(duì)使用這些產(chǎn)品時(shí)的安全性有一個(gè)大概的了解。
SQL Server 2000 安全模型
SQL Server 2000 安全模型是基于 Windows 安全模型實(shí)現(xiàn)的。有關(guān) Windows 安全最佳做法的詳細(xì)討論,請(qǐng)參閱 http://go.microsoft.com/fwlink/?LinkId=15392。
應(yīng)該按圖 1 所示保護(hù) SQL Server 2000 的安全。
圖 1:Windows 用戶和組為 SQL Server 管理員提供了強(qiáng)大且靈活的安全模型
上圖中的步驟可以總結(jié)為如下幾點(diǎn):
1. 將每個(gè)域中的用戶指派到 Windows 全局組。
2. 將各個(gè)域中的 Windows 全局組放入 Windows 本地組。
3. 授予 Windows 本地組登錄 SQL Server 2000 的權(quán)限。
4. 授予 Windows 本地組訪問適當(dāng)數(shù)據(jù)庫(kù)的權(quán)限。此 Windows 本地組可能與步驟 3 中被授予登錄權(quán)限的本地組不同。因此,通常重復(fù)步驟 1 和 2 來按需要的訪問權(quán)限組織用戶。
bitscn_com
5. 為 Windows 本地組分配對(duì)特定數(shù)據(jù)庫(kù)對(duì)象的訪問權(quán)限。
另一種實(shí)現(xiàn)安全的途徑是基于角色的使用,通常通過如圖 2 所示的方式來實(shí)現(xiàn)。
圖 2:基于角色的安全是 SQL Server 2000 中的另一個(gè)安全選項(xiàng)
當(dāng)使用角色來分配對(duì)象權(quán)限時(shí),仍然需要使用建議的方法為各個(gè)用戶授予對(duì)服務(wù)器和數(shù)據(jù)庫(kù)的訪問權(quán)限。
步驟 1 到步驟 4 與圖 1 中基本相同,所不同的只是可能不必創(chuàng)建多個(gè) Windows 全局組和本地組。同時(shí),它還對(duì) Windows 2000 通用組提供完全支持。
步驟 5:將各個(gè) Windows 帳戶和 Windows 組分配給某個(gè)角色。
步驟 6:為角色分配對(duì)象訪問權(quán)限。
使用角色,通過在 SQL Server 2000 內(nèi)組織用戶而減少了在 Windows 內(nèi)組織用戶的需要。
身份驗(yàn)證模式
SQL Server 2000 提供兩種身份驗(yàn)證模式來保護(hù)對(duì)服務(wù)器訪問的安全:Windows 身份驗(yàn)證模式和混合模式。
Windows 身份驗(yàn)證模式
Windows 身份驗(yàn)證模式是 SQL Server 2000 中的默認(rèn)身份驗(yàn)證模式。在 Windows 身份驗(yàn)證模式下,SQL Server 2000 僅依賴用戶的 Windows 身份驗(yàn)證。然后,授予 Windows 用戶或組對(duì) SQL Server 的訪問權(quán)限。使用此模式與服務(wù)器建立的連接稱為信任連接。
中國(guó)網(wǎng)管聯(lián)盟www.bitscn.com
當(dāng)使用 Windows 身份驗(yàn)證模式時(shí),數(shù)據(jù)庫(kù)管理員通過授予用戶登錄 SQL Server 2000 的權(quán)限來允許他們?cè)L問運(yùn)行 SQL Server 的計(jì)算機(jī)。Windows 安全標(biāo)識(shí)符 (SID) 用于跟蹤已經(jīng)過 Windows 驗(yàn)證的登錄。使用 Windows SID,數(shù)據(jù)庫(kù)管理員可以直接授予 Windows 用戶或組登錄權(quán)限。
混合模式
在混合模式下,可以使用 Windows 身份驗(yàn)證或 SQL Server 身份驗(yàn)證對(duì)用戶進(jìn)行驗(yàn)證。SQL Server 負(fù)責(zé)維護(hù)經(jīng)過 SQL Server 身份驗(yàn)證的用戶的用戶名和密碼對(duì)。
如果客戶端和服務(wù)器能夠使用 NTLM 或 Kerberos 登錄身份驗(yàn)證協(xié)議,則以混合模式連接的 SQL Server 就像使用 Windows 身份驗(yàn)證模式一樣,也依賴 Windows 來驗(yàn)證用戶身份。如果客戶端無法使用標(biāo)準(zhǔn) Windows 登錄,則 SQL Server 要求提供用戶名和密碼對(duì),并將其與存儲(chǔ)在系統(tǒng)表中的用戶名和密碼對(duì)進(jìn)行比較。依賴用戶名和密碼對(duì)的連接稱為非信任連接或 SQL 連接。
在內(nèi)部使用安全標(biāo)識(shí)號(hào)
SQL Server 使用 SID 跟蹤信任的登錄。可以直接對(duì) Windows 用戶和組授予對(duì)數(shù)據(jù)庫(kù)或特定數(shù)據(jù)庫(kù)對(duì)象的訪問權(quán)限。例如,Jane 同時(shí)是 Windows 中 SALES 和 MARKETING 組的成員。SALES 組被授予了登錄 SQL Server 以及訪問 pubs 數(shù)據(jù)庫(kù)的權(quán)限。管理員可以通過 Jane 的 Windows 名稱 REDMOND\Jane 授予其訪問 authors 表的權(quán)限。Windows 帳戶必須通過域和用戶名來引用。在這種情況下,Jane 的 SID 將存儲(chǔ)在 pubs 數(shù)據(jù)庫(kù)的系統(tǒng)表中。SQL Server 2000 不支持用戶主體名 (UPN)。例如,如果 Windows 登錄包含域 SALES 和用戶名 SOMEONE,那么登錄到 SQL Server 時(shí)應(yīng)使用 SALES\SOMEONE,而不能使用 Windows 2000 Active Directory 所支持的 SOMEONE@MYCOMPANY.COM 形式的登錄。
feedom.net
角色
角色的使用與 Windows 組的使用很相似。通過角色,可以將用戶集中到一個(gè)單元中,然后對(duì)這個(gè)單元應(yīng)用權(quán)限。對(duì)角色授予、拒絕或吊銷權(quán)限時(shí),將對(duì)其中的所有成員生效?梢杂媒巧珌泶硪粋(gè)組織中某一類工作人員所執(zhí)行的某項(xiàng)工作,然后對(duì)該角色授予權(quán)限。當(dāng)工作人員執(zhí)行該項(xiàng)工作時(shí),便成為該角色的成員;而當(dāng)不再執(zhí)行該項(xiàng)工作時(shí),便不再是該角色的成員。這樣,就不必在用戶接受或離開某項(xiàng)工作時(shí),反復(fù)地授予、拒絕或吊銷每個(gè)用戶的權(quán)限。
角色的功能之所以如此強(qiáng)大,其中涉及到了許多關(guān)鍵的概念。首先,除固定的服務(wù)器角色外,其他角色都是在數(shù)據(jù)庫(kù)內(nèi)部實(shí)現(xiàn)的。這意味著數(shù)據(jù)庫(kù)管理員無需依賴 Windows 管理員來組織用戶。第二,角色可以嵌套。嵌套的深度沒有限制,但不允許循環(huán)嵌套。第三,數(shù)據(jù)庫(kù)用戶可以同時(shí)是多個(gè)角色的成員。
因?yàn)榻巧倪@些特性,使得數(shù)據(jù)庫(kù)管理員可以安排權(quán)限的層次結(jié)構(gòu),以反映使用數(shù)據(jù)庫(kù)的組織的管理結(jié)構(gòu)。例如,財(cái)務(wù)部門可能包含分別負(fù)責(zé)應(yīng)付帳款和應(yīng)收帳款的不同組。數(shù)據(jù)庫(kù)管理員可以分別為 APEmployees 和 AREmployees 創(chuàng)建不同的數(shù)據(jù)庫(kù)角色,并只對(duì)每個(gè)角色分配完成相應(yīng)工作的雇員所需的權(quán)限。然后,數(shù)據(jù)庫(kù)管理員可以創(chuàng)建一個(gè) FinManagers 角色,并使之包含這兩個(gè)限制較多的角色(APEmployees 和 AREmployees)。這樣,F(xiàn)inManagers 將具有他們的直接下屬雇員的所有權(quán)限。當(dāng)某個(gè)負(fù)責(zé)應(yīng)付帳款的雇員被提升為管理人員時(shí),數(shù)據(jù)庫(kù)管理員只需要將其添加到 FinManagers 角色中即可。
網(wǎng)管網(wǎng)bitsCN.com
public 角色
public 角色在每個(gè)數(shù)據(jù)庫(kù)(包括系統(tǒng)數(shù)據(jù)庫(kù) master、msdb、tempdb 和 model)中都存在。public 角色提供數(shù)據(jù)庫(kù)中用戶的默認(rèn)權(quán)限,不能刪除。其功能相當(dāng)于 Windows NT 4.0 環(huán)境中的 Everyone 組。每個(gè)數(shù)據(jù)庫(kù)用戶都自動(dòng)是此角色的成員,因此,無法在此角色中添加或刪除用戶。
預(yù)定義角色
SQL Server 2000 包括幾個(gè)預(yù)定義的角色。這些角色具有預(yù)定義的、不能授予其他用戶帳戶的內(nèi)在權(quán)限。有兩種類型的預(yù)定義角色:固定服務(wù)器角色和固定數(shù)據(jù)庫(kù)角色。
固定服務(wù)器角色
固定服務(wù)器角色的作用域在服務(wù)器范圍內(nèi)。它們存在于數(shù)據(jù)庫(kù)之外。固定服務(wù)器角色的每個(gè)成員都能夠向該角色中添加其他登錄。
注意 Windows BUILTIN\Administrators 組(本地管理員組)的所有成員都默認(rèn)是 sysadmin 角色的成員。
表 1列出了 SQL Server 2000 中存在的固定服務(wù)器角色。
表 1:SQL Server 2000 固定服務(wù)器角色
要將用戶添加到固定服務(wù)器角色中,請(qǐng)使用下列 Transact-SQL 語(yǔ)句:
/* Add Bob to the sysadmin server role */
網(wǎng)管網(wǎng)bitsCN_com
exec sp_addsrvrolemember "REDMOND\Bob", "sysadmin"
可以將 Windows 用戶和組添加到服務(wù)器角色中。下列代碼顯示了如何使用 SQL 分布式管理對(duì)象 (DMO) 集合將用戶添加到服務(wù)器角色中:
' Declare variables
Dim oServer As SQLDMO.SQLServer
' Create a server object and connect
Set oServer = CreateObject("SQLDMO.SQLServer")
oServer.Connect ("SERVERNAME")
' Add Bob to the sysadmin server role
oServer.ServerRoles("sysadmin").AddMember ("REDMOND\Bob")
有關(guān)如何使用固定服務(wù)器角色的詳細(xì)信息,請(qǐng)參閱 SQL Server 聯(lián)機(jī)叢書。
固定數(shù)據(jù)庫(kù)角色
固定數(shù)據(jù)庫(kù)角色在數(shù)據(jù)庫(kù)級(jí)別定義,并在每個(gè)數(shù)據(jù)庫(kù)中都存在。db_owner 和 db_security 管理員角色的成員可以管理固定數(shù)據(jù)庫(kù)角色的成員身份;但是,只有 db_owner 角色可以將其他用戶添加到 db_owner 固定數(shù)據(jù)庫(kù)角色中。
表 2 列出了 SQL Server 2000 中存在的固定數(shù)據(jù)庫(kù)角色。
表 2:SQL Server 2000 固定數(shù)據(jù)庫(kù)角色
|