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


16

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

回答:


22

これにより、探しているものが得られます。

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

1
(検索で見つけました。)これには、Service Brokerメッセージタイプなどのスキーマスコープ以外のオブジェクトは含まれません。特定のオブジェクトメタデータビューをすべて掘り下げることなく、その情報を取得する簡単な方法を知っていますか?(また、興味のあるオブジェクトを除外する可能性があるため、このクエリで返されるオブジェクトのタイプを制限した理由もわかりません。)
Jon Seigel

まあ、私は自分のビューを作成することになりました。より良い解決策を知っているなら、私に知らせてください。
ジョンセイゲル

@JonSeigel上記のUNIONを使用して作成しました。私のものを比較して改善できるようにあなたのものを投稿できますか?
PseudoToad

3

すべての非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

1
質問は、データベース自体だけでなく、すべてのデータベースオブジェクトを要求しました。
SqlWorldWide

@SqlWorldWide-ただし、受け入れられた回答には所有されているデータベースが含まれていないため、この回答はさらに役立ちます。(興味深いことに、「所有者」の名前でも受け入れ答えで参照sys.database_principalsテーブルに存在しないここで返さう愛で何が起こっているか知っている。。)
youcantryreachingme
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.