Sql-Server

如何檢測授予角色的執行權限(未使用 ON 子句時)

  • July 19, 2021

我只是花了幾個小時試圖弄清楚應用程序如何有權執行儲存過程。

StackExchange 中的TIL:原來該ON子句對於 來說是可選的GRANT,允許授予角色對所有內容執行。在我盡力驗證語法之後,我不得不在這個 MSDN 頁面的最底部發笑。

授予對象權限 (Transact-SQL)

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

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