web-dev-qa-db-ja.com

特定のユーザーが所有するすべてのデータベースオブジェクトを取得できますか?

去るユーザーがいるので、彼が所有するすべてのデータベースオブジェクトを知る必要があります。この情報を提供するクエリはありますか?

16
JHFB

これはあなたが探しているものを得るはずです:

;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 =ビュー
23
Thomas Stringer

Sa以外のすべてのデータベース所有者を表示するには:

SELECT suser_sname( owner_sid ) OwnerID , * FROM sys.databases where suser_sname( owner_sid ) <> 'sa'

SQLシステムのジョブ所有者が必要な場合:

select s.name,l.name  
from  msdb..sysjobs s 
left join master.sys.syslogins l on s.owner_sid = l.sid 
where l.name is not null and l.name <> 'sa'
order by l.name
3
Steve

ジョブの場合、所有者がグループの一部であり、ログインに存在しない可能性があるため、sysloginsを使用できません。以下を使用してください

select msdb.[dbo].[SQLAGENT_SUSER_SNAME](owner_sid), * 
from msdb.dbo.sysjobs
3
Juicy Meats