Sql-Server
如何查找登錄名擁有的所有實體?
我必須生成一份報告,列出特定登錄名擁有的所有 SQL 實體。
有什麼方法可以使用 SQL 審計/dmv 審計/獲取登錄所擁有的所有實體的列表?
例如:目前我正在研究代理工作(sysjobs),以及每個數據庫的所有者屬性(sys.databases)。不確定要調查哪些地方以涵蓋所有實體。任何建議都會有所幫助。
登錄名可以擁有數據庫,但使用者擁有模式或模式範圍的對象,因此您需要將使用者映射到登錄名。
以下腳本應該為您提供給定主體的所有這些數據庫級對象。模式預設歸數據庫所有者所有,對象預設歸模式所有者所有,除非在這種情況下發生更改,否則此查詢將顯示它們。
至於子數據庫級別的數據,你必須指定數據庫,例如
YourDatabase.sys.objects
如果你想要所有的數據庫,如果需要的話不要忘記數據庫級別的對象master
和其他系統數據庫。此頁面上提供了可以擁有的對象的完整列表,但通用模板如下所示:
DECLARE @id int = (SELECT dp.principal_id FROM sys.database_principals dp WHERE dp.name = 'UserName'); SELECT 'Schema', s.name FROM sys.schemas s WHERE s.principal_id = @id UNION ALL SELECT 'Object', o.name FROM sys.objects o WHERE o.principal_id = @id SELECT 'Object', as.name FROM sys.asymmetric_keys as WHERE as.principal_id = @id .....
伺服器登錄也可以擁有一些伺服器對象。您可以以類似的方式執行此操作
DECLARE @id int; DECLARE @sid varbinary(85); SELECT @id = sp.principal_id, @sid = sp.sid FROM sys.server_principals sp WHERE sp.name = 'LoginName'; SELECT 'Database' AS ObjectType, d.name FROM sys.databases d WHERE d.owner_sid = @sid UNION ALL SELECT 'Assembly' AS ObjectType, a.name FROM sys.assemblies a WHERE as.principal_id = @id .....