2011-08-19 70 views
3

時,這是SQL Server 2005或更高版本,但我很想知道,如果SQL服務器以同樣的方式2000點可以。考慮以下情況。解決權限使用SQL Server的Windows身份驗證

兩個SQL Server的Windows身份驗證登錄登錄名爲Windows組:

MyDomain\Group1 
MyDomain\Group2 

與映射到這些登錄的兩個用戶的數據庫:

USE MyDatabase 
CREATE USER [User1] FOR LOGIN [MyDomain\Group1] 
CREATE USER [User2] FOR LOGIN [MyDomain\Group2] 

用戶1和用戶被授予不相交數據庫中的權限,例如:

GRANT SELECT ON Table1 TO User1 
DENY SELECT ON Table1 TO User2 
GRANT SELECT ON Table2 TO User2 
DENY SELECT ON Table2 TO User1 

客戶端連接到SQL Ser使用屬於MyDomain\Group1MyDomain\Group2的Windows身份。

客戶端映射到哪個數據庫用戶?即SELECT USER_NAME()是否退回User1User2

客戶端有什麼權限?是否有確定客戶端連接爲User1或User2的定義的優先級?這在BOL中記錄在哪裏?

背景

這涉及目前由多個應用程序,每一個目前擁有自己的SQL Server登錄訪問的數據庫,對數據庫對象應用程序特定的權限。

我想切換到使用Windows身份驗證來提高安全性,我寧願使用Windows組而不是用戶的靈活性(我不希望DBA必須管理所有個人用戶的登錄名)。

但是給定的用戶可以使用多個應用程序(因此是多個Windows組映射到SQL登錄的一個成員),因此在一個數據庫用戶的連接的映射歧義的潛力。

我GOOGLE搜索和聯機叢書,並不能找到上含糊不清,例如如何解決(例如優先級規則)的明確信息。

任何提示和最佳做法是除了回答上述問題歡迎。

回答

1

這是一個有趣的問題。

我會假設你的客戶應該在所有這些表沒有訪問,廣告DENY權限優先於授予。在SQL Server中,DENY-overrides-GRANT原則有一個例外:當GRANT在列級完成時,即使整個表被拒絕訪問,它也將允許訪問,如MSDN states

編輯:要了解適用於注意到登錄(服務器)是不一樣的數據庫的用戶是很重要的。通過Windows組成員身份登錄的用戶將獲得隱式創建的用戶,並且需要對其應用權限。有關更多信息,另請參閱this blog article

+0

我糾正了第二個DENY。 「我認爲它應該適用於組,而不是用戶」 - 我不明白你在說什麼:GRANT/DENY需要數據庫用戶,而不是登錄。我真正想知道哪個數據庫用戶是一個匹配兩個登錄名的客戶端被映射到的。 – Joe

+0

是的,對不起,術語「用戶」使我困惑,因爲他們映射到(Windows)組。我的錯。 – Lucero

+0

+1博客文章回答了我想要的大部分內容。但是仍然不清楚隱式創建的用戶使用了哪些優先規則(如果有的話)。 – Joe

相關問題