Sql-Server

sys.database_permissions 可以包含 REVOKE 嗎?

  • May 19, 2021

sys.database_permissions的 Microsoft 文件提到有效值為state“D”、“R”、“G”、“W”。對應的值為state_desc“DENY”、“REVOKE”、“GRANT”、“GRANT_WITH_GRANT_OPTIONS”。

“R”/“REVOKE”的值讓我很驚訝。“REVOKE”不只是消除先前授予或拒絕權限的語法的一部分嗎?

值或“R”/“REVOKE”是否可能出現在此系統視圖中?如果有,會在什麼情況下出現?

我知道,如果您撤銷了拒絕權限,則拒絕權限就會消失;如果您撤銷已授予的權限,則已授予的權限將被刪除。在什麼情況下 SQL Server 會註冊 REVOKE’ingsys.database_permissions而不是簡單地刪除現有的 GRANT/REVOKE/GRANT_WITH_GRANT_OPTIONS 行?

REVOKE不只是刪除訪問權限,而是撤消由 aGRANTDENY. 換句話說,如果對安全主體(例如UserLogin等)的對象顯式拒絕權限,則可以通過REVOKE在其上使用來刪除顯式拒絕的權限。

經過一些研究,根據Mark Chesney的Stack Overflow 回答,看起來“R”作為視圖中state列的潛在值的案例sys.database_permissions是針對與父表或視圖的權限相矛盾的列級權限:

對於可以具有列權限的對象(例如表或視圖),DENY 或 GRANT 對象權限的存在需要 REVOKE 才能保留列權限。

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