Sql-Server

為什麼 db_datareader 的成員可以選擇 sys 視圖

  • July 29, 2019

在 SQL Azure 中,我對 db_datareader 的理解是允許SELECT all user tables

我找不到使用者表的確切定義,但我認為它是所有非內置表和視圖,並排除了sys架構中的所有視圖和表。

那麼為什麼成員可以執行以下語句?

SELECT TOP (5) * FROM [sys].tables

SELECT TOP (5) * FROM [sys].[all_views];

SELECT * FROM sys.dm_exec_sessions;

SELECT TOP (5) * FROM [sys].objects

… 和更多

元數據可見性配置與使用者表的權限不同 - 只要授予基礎對象的權限,就會隱式包含這些權限。

從文件中獲取以下範例:

SELECT name, object_id  
FROM sys.tables  
WHERE name = 'myTable';  
GO  

對於那些沒有被授予對這些基礎表的權限的使用者,上述內容不會返回任何結果。因此,如果您授予 db_datareader(所有表/視圖上的 IE SELECT),您也隱式授予該數據庫中所有表/視圖的 sys.tables 訪問權限。

這適用於所有 GRANT 狀態(IE DENY 不會導致使用者看到相關對象的元數據,但 GRANT 會)

總之,授予對使用者對象的訪問權限還授予對通過系統目錄公開的該對象的元數據的訪問權限。

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