我可以检索特定用户拥有的所有数据库对象吗?

JHF*_*HFB 17 sql-server-2008 security sql-server

我们有一个用户即将离开,我需要知道他拥有的每个数据库对象。是否有提供此信息的查询?

Tho*_*ger 23

这应该让你得到你想要的东西:

;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';
Run Code Online (Sandbox Code Playgroud)

这将获得您的特定用户拥有的对象('YourUser'当然是替代品)。此查询拉取的对象类型是:

  • FN = SQL 标量函数
  • FS = 汇编 (CLR) 标量函数
  • FT = 汇编 (CLR) 表值函数
  • IF = SQL 内联表值函数
  • P = SQL 存储过程
  • PC = 汇编 (CLR) 存储过程
  • TA = 汇编 (CLR) DML 触发器
  • TF = SQL 表值函数
  • TR = SQL DML 触发器
  • U = 表(用户定义)
  • V = 视图