Sql-Server

允許 db_owner 向數據庫添加/查看現有登錄

  • May 20, 2012

在我們的開發伺服器(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 出現時,使用使用者定義的伺服器角色會變得更容易一些,但現在這並不能真正幫助您。

引用自:https://dba.stackexchange.com/questions/8262