1

以前にsysビューまたはデータ管理ビューからこれを実行したことを誓い、どこかで情報を見つけた可能性があります。それでも、コードを見つけることができず、過去に拡張プロパティを使用してこれを行っただけで、オンラインのどこでも、オブジェクトの作成をトレースする以外にこれを行うことができないことを読んでいます。SQL Server 2008 R2以降のTSQLでプロシージャを作成したユーザーを見つけることができるかどうかを誰かに教えてもらえますか?

EG:sys.objectsでオブジェクトの名前を見つけることができ、オブジェクトが次のように変更されたときは次のようになります。

Select Top 10 *
from sys.objects o (nolock) 
where type = 'V'  -- View
and name like '%Finance%'  -- Finance in the name of the object somewhere

ユーザーアカウントに関する情報を持つテーブルが2つあることを知っています(ユーザーを取得するために使用したテーブルの1つが非推奨になっていることはわかっていますが、これらの1つであるかどうかはわかりません)。

Select Top 10 *
from sys.server_principals p (nolock) 
where p.type = 'U'

Select top 10 *
from sysusers

オブジェクトの作成者または類似のオブジェクトのSIDを見つける方法はありますか?このサイトや他のサイトをチェックすると、オンラインで「いいえ」と表示されます。誰か知っている?

4

1 に答える 1

1

デフォルトでは、SQL Serverは、デフォルトのトレースを除いて、誰がテーブルを作成したかを追跡しません。したがって、最近作成された場合は、ここでその情報を見つけることができます。

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX('\', REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT LoginName, StartTime
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 46 AND EventSubClass = 0 
AND databaseName = N'Your database name'
AND objectName = N'The table name you are trying to track down'
ORDER BY StartTime DESC;

ただし、デフォルトのトレースはローリングトレースであり、データがどこまで遡るかは、サーバーに対するワークロードによって異なることに注意してください。6か月前に誰がテーブルを作成したかを調べようとしている場合は、運が悪い可能性があります。

これは、 SQL Server監査DDLトリガーなどを使用して、またはデフォルトのトレースを定期的にアーカイブすることで、自分でキャプチャできます(これを行う方法をここに示します)。

于 2013-02-27T17:00:44.187 に答える