允許 db_owner 向數據庫添加/查看現有登錄
在我們的開發伺服器(SQL 2008 R2)上,我們希望本地 dbo 能夠將伺服器上的現有登錄名添加到數據庫中。問題是他們無法查看它們,他們只能在列表中看到自己。我知道這是 SQL Server 更高版本中的安全更改,以更多地分離/限制權限,但在我們的開發環境中,這只是一種痛苦。
我遇到了一篇文章,建議將幾個伺服器元數據視圖的訪問權限授予公共角色。因為這會使事情更像 SQL 2000。(http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=104997內部引用http://technet.microsoft.com/en-us/magazine/cc161026 .aspx )
GRANT VIEW ANY DEFINITION TO public GRANT VIEW SERVER STATE TO public
但這似乎給了公共角色太多的權限。我只想為 dbo 提供對系統元數據視圖的足夠權限,以允許他們瀏覽伺服器上的現有登錄名。這樣他們就可以選擇他們需要添加的人,而不必每次都向伺服器管理員發送消息。
有誰知道為了允許這樣做而應該被授予權限的最小視圖集?
謝謝!
GRANT VIEW DEFINITION ON LOGIN::Whoever TO [domain\dbogroup]
在master還不夠嗎?GRANT Server Principal Permissions中的 MSDN(我認為,無法測試)暗示了這一點
做不到這一點,一個可能對 SQL Server 2005+ 有用的怪癖
這可能不會給出任何行
SELECT * FROM sys.server_principals WHERE name = 'domain\somegroup';
但這將給出一個數字,如果它存在
SELECT SUSER_ID('domain\somegroup');
注意:SQL Server 2012 包含登錄在 DB 級別的數據庫
首先,您永遠不應該向公眾授予權利。
您需要創建一個域組並將所有開發人員都放在該組中。然後授予他們查看的能力。沒有簡單的方法可以讓非特權登錄有權查看實例級別的所有使用者,而不允許他們創建新登錄,因為沒有可以輕鬆授予所有登錄的 VIEW DEFINITION 權限。為此,您可能需要創建一個域組,其中包含所需的開發人員,然後設置一個作業,該作業每晚授予該組對實例上的每個登錄名的 VIEW DEFINITION 權限。
當 SQL 2012 出現時,使用使用者定義的伺服器角色會變得更容易一些,但現在這並不能真正幫助您。