Sql-Server

我可以檢索特定使用者擁有的所有數據庫對象嗎?

  • January 16, 2020

我們有一個使用者要離開,我需要知道他擁有的每個數據庫對象。是否有可以提供此資訊的查詢?

這應該可以為您提供所需的內容:

;with objects_cte as
(
   select
       o.name,
       o.type_desc,
       case
           when o.principal_id is null then s.principal_id
           else o.principal_id
       end as principal_id
   from sys.objects o
   inner join sys.schemas s
   on o.schema_id = s.schema_id
   where o.is_ms_shipped = 0
   and o.type in ('U', 'FN', 'FS', 'FT', 'IF', 'P', 'PC', 'TA', 'TF', 'TR', 'V')
)
select
   cte.name,
   cte.type_desc,
   dp.name
from objects_cte cte
inner join sys.database_principals dp
on cte.principal_id = dp.principal_id
where dp.name = 'YourUser';

這將獲得您的特定使用者擁有的對象('YourUser'當然可以替代)。此查詢提取的對像類型有:

  • FN = SQL 標量函式
  • FS = 彙編 (CLR) 標量函式
  • FT = 彙編 (CLR) 表值函式
  • IF = SQL 內聯表值函式
  • P = SQL 儲存過程
  • PC = 裝配 (CLR) 儲存過程
  • TA = 裝配 (CLR) DML 觸發器
  • TF = SQL 表值函式
  • TR = SQL DML 觸發器
  • U = 表(使用者定義)
  • V = 查看

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