Sql-Server
如何檢測授予角色的執行權限(未使用 ON 子句時)
我只是花了幾個小時試圖弄清楚應用程序如何有權執行儲存過程。
StackExchange 中的TIL:原來該
ON
子句對於 來說是可選的GRANT
,允許授予角色對所有內容執行。在我盡力驗證語法之後,我不得不在這個 MSDN 頁面的最底部發笑。CREATE ROLE Test GRANT EXECUTE TO Test
好的,這很酷(不是非常原則的最小特權)。
但是:我如何發現或檢測該贈款?
我嘗試查看所有 SQL Server Management Studio 登錄、角色、使用者和架構權限 GUI,但在任何地方都沒有看到這種類型的授予。
在調試時,我發現了有關在查詢中列舉權限的問題,雖然這些問題是相關的,但那裡的答案既沒有提到也沒有涵蓋這種情況:
我正在尋找最可靠的方法來辨識這種授予(或拒絕)特權的方法。
GRANT EXECUTE TO [principal]
只是一個捷徑GRANT EXECUTE ON DATABASE::<dbname> TO [principal];
您可以使用以下方法進行檢查:
SELECT dp.name , perms.class_desc , perms.permission_name , perms.state_desc FROM sys.database_permissions perms INNER JOIN sys.database_principals dp ON perms.grantee_principal_id = dp.principal_id WHERE dp.name = 'MyRole'
為了補充漢娜弗農的答案:
SELECT * FROM sys.objects WHERE object_id IN ( SELECT major_id FROM sys.database_permissions perms INNER JOIN sys.database_principals dp ON perms.grantee_principal_id = dp.principal_id WHERE dp.name = 'ProdConfigUsers' ) AND name like '%%' ORDER BY create_date DESC