Sql-Server

顯示表的所有權限的腳本

  • June 2, 2020

在我的數據庫中,我有一個名為 spGen2_tblIE_SchedProcess_Update 的過程。

當我執行這個腳本

select * from sys.objects
where name = 'spGen2_tblIE_SchedProcess_Update'

在此處輸入圖像描述

在同一個數據庫中,我有一個名為 tblIE_Step 的表

當我執行以下腳本時

select * from sys.objects
where name = 'tblIE_Step'

在此處輸入圖像描述

然後我想查看對象的所有權限

當我檢查我的儲存過程時,我執行這個腳本:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
   , 'Type' = per.state_desc, 'Permission' = per.permission_name
   , 'Login' = pri.name, 'Type' = pri.type_desc 
   , *
From sys.objects as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where p.object_id = 87671360

我得到了權限:

在此處輸入圖像描述

但是當我為我的桌子執行相同的程序時,我什麼也沒有得到:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
   , 'Type' = per.state_desc
   , 'Permission' = per.permission_name
   , 'Login' = pri.name, 'Type' = pri.type_desc 
   , *
From sys.objects as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where p.object_id = 389576426

在此處輸入圖像描述

我知道有屬於具有 db_reader 和 db_writer 權限的角色的登錄名和組。但是,它們沒有在這裡顯示。

如何更改我的腳本,以便它向我顯示此表的所有權限?

我有幾個儲存過程可用於顯示給定數據庫的所有權限。對於單個使用者/委託人或所有使用者/委託人。 sp_dbpermissionssp_srvpermissions

sp_dbpermissions 的輸出(sp_srvpermissions 在伺服器級別相同)如下所示

在此處輸入圖像描述

頁面外是適當的撤銷/授予/拒絕命令。

僅供參考,我在這裡的範例是使用“ALL”作為數據庫參數執行的,因此它顯示了所有數據庫的輸出,而不僅僅是一個。

我主要將它們用作研究工具,因此您將找到參數,這些參數可讓您搜尋直接應用於給定對象(類似於上面的查詢)或給定角色成員(以及該角色的權限)等的權限。

注意:Minion 也有一個企業版,它對權限進行了大量詳細的數據收集,很可能會給你想要的東西。然而,它是一個付費程序。(如果您可以與您的管理層討論費用,那可能是值得的)

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