Sql-Server

授予每個數據庫中系統“sys”表的最小選擇權限

  • March 8, 2020

我們的開發團隊創建了一些 SSRS 報告,這些報告僅從每個數據庫中檢索元數據(不是“真實”數據)。我正在嘗試將執行這些報告的服務帳戶鎖定為所需的最低權限。

查詢僅從每個數據庫中的系統表中進行選擇,例如:

sys.tables
sys.extended_properties
SYS.objects
SYS.schemas
sys.dm_db_partition_stats
sys.indexes

我認為以下會做到這一點,但沒有這樣的運氣。

GRANT VIEW ANY DATABASE TO [DOMAIN\LOGIN]
GRANT VIEW SERVER STATE TO [DOMAIN\LOGIN]
GRANT VIEW DATABASE STATE TO [DOMAIN\LOGIN]

查詢系統表會報錯:

The server principal "DOMAIN\LOGIN" is not able to access the database "DATABASENAME" under the current security context.

除了為每個數據庫創建一個登錄使用者然後明確授予對系統表的權限外,我似乎找不到解決此問題的方法。這對所有未來的數據庫提出了一系列新的挑戰。我是否遺漏了什麼,或者沒有簡單的方法可以在不授予“sysadmin”伺服器級角色的情況下全面授予對所有數據庫的訪問權限?

除了為每個數據庫創建一個登錄使用者外,我似乎找不到解決此問題的方法

從 SQL Server 2014 開始,CONNECT ANY DATABASE可以使用新權限來完成此操作

…然後明確授予對系統表的權限。

您無需授予對系統表的權限,它們對任何使用者都是可見的。但是它們包含的對象的可見性取決於使用者擁有的權限:他只能看到它擁有權限的那些對象:元數據可見性配置

這可以通過授予您的登錄VIEW ANY DEFINITION權限來解決

此外,無需授予VIEW ANY DATABASE TO權限,因為它已授予公共,並且 VIEW SERVER STATE TO您描述檢索的元數據不需要。

因此,您只需要這些權限:

  • CONNECT ANY DATABASE訪問所有數據庫
  • VIEW DATABASE STATE用於查詢sys.dm_db_partition_stats
  • VIEW ANY DEFINITION擁有任何元數據的權利

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