Sql-Server-2012

如何在 SQL Server 2012 上創建只讀伺服器角色?

  • October 15, 2021

我在創建新伺服器角色時授予“查看任何數據庫”權限,但意識到此權限僅允許使用者查看系統數據庫。

我正在嘗試創建一個只讀且可以讀取任何數據庫的伺服器角色。

有沒有辦法創建使用者定義的伺服器角色來讀取使用者數據庫?還是我必須通過每個使用者的使用者映射來做到這一點?

發布這個作為答案只是因為評論太長,而且很快就會與其他使用者相關。

SQL Server 2014 增加了一些新的伺服器級權限,這將有助於這種類型的場景——它們在設計時考慮到了審計,但這種類型的要求似乎也符合這個要求。您可以簡單地將以下兩個權限添加到伺服器級登錄:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

前者,就像聽起來一樣,允許登錄連接到任何數據庫。這樣做的好處是,即使對於將來創建的數據庫,它也允許這樣做(前提是您沒有設置顯式拒絕,這是您可以保護某些使用者數據庫免受具有此權限的登錄的方式)。後者允許登錄對他們有權訪問的任何數據庫執行讀取操作 - 因此他們可以SELECT從表、視圖、UDF 等中執行任何UPDATE操作(我尚未測試此權限是否理解儲存過程執行 DML)。如果您想為登錄提供對整個伺服器的大範圍讀取訪問權限,或者更細粒度地您可以CONNECT向某些數據庫授予傳統權限,那麼這些功能組合起來效果很好,並且SELECT ALL USER SECURABLES權限將僅對登錄具有顯式訪問權限的數據庫起作用。

此處記錄了 2014 年的安全更改- 好吧,部分;他們忘記了數據庫級別的權限ALTER ANY DATABASE EVENT SESSION——儘管這與這裡無關。

沒有伺服器級別的“讀取任何數據庫”權限,並且伺服器級別的角色不能被授予數據庫級別的權限

所以是的,您必須將使用者單獨映射到數據庫。如果您使用的是 Active Directory,您可以創建一個 windows 組,然後將該組登錄到 SQL Server,然後在該組的所有數據庫中應用 db_datareader(儘管您需要在每個數據庫中創建使用者)。

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