Sql-Server
顯示表的所有權限的腳本
在我的數據庫中,我有一個名為 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_dbpermissions和sp_srvpermissions。
sp_dbpermissions 的輸出(sp_srvpermissions 在伺服器級別相同)如下所示
頁面外是適當的撤銷/授予/拒絕命令。
僅供參考,我在這裡的範例是使用“ALL”作為數據庫參數執行的,因此它顯示了所有數據庫的輸出,而不僅僅是一個。
我主要將它們用作研究工具,因此您將找到參數,這些參數可讓您搜尋直接應用於給定對象(類似於上面的查詢)或給定角色成員(以及該角色的權限)等的權限。
注意:Minion 也有一個企業版,它對權限進行了大量詳細的數據收集,很可能會給你想要的東西。然而,它是一個付費程序。(如果您可以與您的管理層討論費用,那可能是值得的)