萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> SQL Server 2000 安全模型

SQL Server 2000 安全模型

  簡介  本白皮書面向的對象是 Microsoft SQL Server 管理員和開發人員,主要是介紹 SQL Server 2000 Service Pack 3 (SP3) 的安全功能。本文討論了安全方面的一些最佳做法,給出了詳細的建議信息,並提供了一些源代碼示例。最後,列出了安全最佳做法檢查表。本白皮書的重點是 SQL Server 引擎。有關復制、分析服務或數據轉換服務的詳細討論,請參閱 ?LinkId=15402。    前提  SQL Server 2000 安全是基於 Microsoft Windows NT 4.0® 和 Windows 2000 安全模型實現的,因此,閱讀本白皮書的前提是讀者對 Windows NT 4.0 和 Windows 2000 安全有一個基本的了解。另外一個前提就是,讀者理解域、全局組、本地組和用戶帳戶應用於 Windows NT 4.0 安全上下文時的概念,以及 Windows 2000 中 Microsoft Active Directory ®的概念。    對於那些對代碼示例感興趣的讀者,學習 Microsoft Visual Basic® 和結構化查詢語言 (SQL) 有助於增強理解。此外,有使用 SQL 分布式管理對象 (SQL-DMO) 的經驗對理解本白皮書中的內容也大有好處。    但是,即便是那些對 Windows NT 4.0、Windows 2000 或 SQL Server 知之甚少的讀者,通過閱讀本文,也將對使用這些產品時的安全性有一個大概的了解。     SQL Server 2000 安全模型  SQL Server 2000 安全模型是基於 Windows 安全模型實現的。有關 Windows 安全最佳做法的詳細討論,請參閱 ?LinkId=15392。    應該按圖 1 所示保護 SQL Server 2000 的安全。     圖 1:Windows 用戶和組為 SQL Server 管理員提供了強大且靈活的安全模型  上圖中的步驟可以總結為如下幾點:    1. 將每個域中的用戶指派到 Windows 全局組。  2. 將各個域中的 Windows 全局組放入 Windows 本地組。  3. 授予 Windows 本地組登錄 SQL Server 2000 的權限。  4. 授予 Windows 本地組訪問適當數據庫的權限。此 Windows 本地組可能與步驟 3 中被授予登錄權限的本地組不同。因此,通常重復步驟 1 和 2 來按需要的訪問權限組織用戶。  5. 為 Windows 本地組分配對特定數據庫對象的訪問權限。    另一種實現安全的途徑是基於角色的使用,通常通過如圖 2 所示的方式來實現。     圖 2:基於角色的安全是 SQL Server 2000 中的另一個安全選項    當使用角色來分配對象權限時,,仍然需要使用建議的方法為各個用戶授予對服務器和數據庫的訪問權限。    步驟 1 到步驟 4 與圖 1 中基本相同,所不同的只是可能不必創建多個 Windows 全局組和本地組。同時,它還對 Windows 2000 通用組提供完全支持。    步驟 5:將各個 Windows 帳戶和 Windows 組分配給某個角色。    步驟 6:為角色分配對象訪問權限。    使用角色,通過在 SQL Server 2000 內組織用戶而減少了在 Windows 內組織用戶的需要。    身份驗證模式  SQL Server 2000 提供兩種身份驗證模式來保護對服務器訪問的安全:Windows 身份驗證模式和混合模式。    Windows 身份驗證模式  Windows 身份驗證模式是 SQL Server 2000 中的默認身份驗證模式。在 Windows 身份驗證模式下,SQL Server 2000 僅依賴用戶的 Windows 身份驗證。然後,授予 Windows 用戶或組對 SQL Server 的訪問權限。使用此模式與服務器建立的連接稱為信任連接。  當使用 Windows 身份驗證模式時,數據庫管理員通過授予用戶登錄 SQL Server 2000 的權限來允許他們訪問運行 SQL Server 的計算機。Windows 安全標識符 (SID) 用於跟蹤已經過 Windows 驗證的登錄。使用 Windows SID,數據庫管理員可以直接授予 Windows 用戶或組登錄權限。    混合模式  在混合模式下,可以使用 Windows 身份驗證或 SQL Server 身份驗證對用戶進行驗證。SQL Server 負責維護經過 SQL Server 身份驗證的用戶的用戶名和密碼對。     如果客戶端和服務器能夠使用 NTLM 或 Kerberos 登錄身份驗證協議,則以混合模式連接的 SQL Server 就像使用 Windows 身份驗證模式一樣,也依賴 Windows 來驗證用戶身份。如果客戶端無法使用標准 Windows 登錄,則 SQL Server 要求提供用戶名和密碼對,並將其與存儲在系統表中的用戶名和密碼對進行比較。依賴用戶名和密碼對的連接稱為非信任連接或 SQL 連接。    在內部使用安全標識號  SQL Server 使用 SID 跟蹤信任的登錄。可以直接對 Windows 用戶和組授予對數據庫或特定數據庫對象的訪問權限。例如,Jane 同時是 Windows 中 SALES 和 MARKETING 組的成員。SALES 組被授予了登錄 SQL Server 以及訪問 pubs 數據庫的權限。管理員可以通過 Jane 的 Windows 名稱 REDMOND\Jane 授予其訪問 authors 表的權限。Windows 帳戶必須通過域和用戶名來引用。在這種情況下,Jane 的 SID 將存儲在 pubs 數據庫的系統表中。SQL Server 2000 不支持用戶主體名 (UPN)。例如,如果 Windows 登錄包含域 SALES 和用戶名 SOMEONE,那麼登錄到 SQL Server 時應使用 SALES\SOMEONE,而不能使用 Windows 2000 Active Directory 所支持的 [email protected] 形式的登錄。    角色    角色的使用與 Windows 組的使用很相似。通過角色,可以將用戶集中到一個單元中,然後對這個單元應用權限。對角色授予、拒絕或吊銷權限時,將對其中的所有成員生效。可以用角色來代表一個組織中某一類工作人員所執行的某項工作,然後對該角色授予權限。當工作人員執行該項工作時,便成為該角色的成員;而當不再執行該項工作時,便不再是該角色的成員。這樣,就不必在用戶接受或離開某項工作時,反復地授予、拒絕或吊銷每個用戶的權限。     角色的功能之所以如此強大,其中涉及到了許多關鍵的概念。首先,除固定的服務器角色外,其他角色都是在數據庫內部實現的。這意味著數據庫管理員無需依賴 Windows 管理員來組織用戶。第二,角色可以嵌套。嵌套的深度沒有限制,但不允許循環嵌套。第三,數據庫用戶可以同時是多個角色的成員。    因為角色的這些特性,使得數據庫管理員可以安排權限的層次結構,以反映使用數據庫的組織的管理結構。例如,財務部門可能包含分別負責應付帳款和應收帳款的不同組。數據庫管理員可以分別為 APEmployees 和 AREmployees 創建不同的數據庫角色,並只對每個角色分配完成相應工作的雇員所需的權限。然後,數據庫管理員可以創建一個 FinManagers 角色,並使之包含這兩個限制較多的角色(APEmployees 和 AREmployees)。這樣,FinManagers 將具有他們的直接下屬雇員的所有權限。當某個負責應付帳款的雇員被提升為管理人員時,數據庫管理員只需要將其添加到 FinManagers 角色中即可。     public 角色    public 角色在每個數據庫(包括系統數據庫 master、msdb、tempdb 和 model)中都存在。public 角色提供數據庫中用戶的默認權限,不能刪除。其功能相當於 Windows NT 4.0 環境中的 Everyone 組。每個數據庫用戶都自動是此角色的成員,因此,無法在此角色中添加或刪除用戶。    預定義角色    SQL Server 2000 包括幾個預定義的角色。這些角色具有預定義的、不能授予其他用戶帳戶的內在權限。有兩種類型的預定義角色:固定服務器角色和固定數據庫角色。    固定服務器角色    固定服務器角色的作用域在服務器范圍內。它們存在於數據庫之外。固定服務器角色的每個成員都能夠向該角色中添加其他登錄。    注意 Windows BUILTIN\Administrators 組(本地管理員組)的所有成員都默認是 sysadmin 角色的成員。    表 1列出了 SQL Server 2000 中存在的固定服務器角色。     表 1:SQL Server 2000 固定服務器角色    要將用戶添加到固定服務器角色中,請使用下列 Transact-SQL 語句:  /* Add Bob to the sysadmin server role */  exec sp_addsrvrolemember "REDMOND\Bob", "sysadmin"    可以將 Windows 用戶和組添加到服務器角色中。下列代碼顯示了如何使用 SQL 分布式管理對象 (DMO) 集合將用戶添加到服務器角色中:  ' 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")    有關如何使用固定服務器角色的詳細信息,請參閱 SQL Server 聯機叢書。    固定數據庫角色    固定數據庫角色在數據庫級別定義,並在每個數據庫中都存在。db_owner 和 db_security 管理員角色的成員可以管理固定數據庫角色的成員身份;但是,只有 db_owner 角色可以將其他用戶添加到 db_owner 固定數據庫角色中。    表 2 列出了 SQL Server 2000 中存在的固定數據庫角色。     表 2:SQL Server 2000 固定數據庫角色  
copyright © 萬盛學電腦網 all rights reserved