2016-11-07 17 views
1

何が見つかる必要があるかは、何らかのテーブルの再作成、どのデータソースが使用されたか、どのスクリプトの場合でも& cです。したがって、システム・ビューなどで、テーブルが手動で作成されたか、クエリによって作成されたかどうか、データが外部データからインポートされたか、データベースの既存のテーブル/ビューからインポートされたかどうかを区別することは可能ですか?私はすでに誰がいつ創造したかを知っています。私はかなりの結果を持っていないデータベース全体をスクリーニングして、今私はメタデータのヒントを探しています。テーブルがSQL-Serverでどのように作成されたか

+1

このようなメタデータはありません。ストアドプロシージャとは異なり、テーブルは内部表現としてのみ格納されます。それらを作成したスクリプトはどこにも記録されません。エンジンの観点からは、「手動でテーブルを作成する」方法はありません。最終的には、(おそらく生成された) 'CREATE TABLE'ステートメントで常に最終的に起こります。 (または、あなたがペタニックにしたい場合は 'SELECT INTO') –

+1

テーブルを作成した原因を知る方法はありません。これについて考える...最終的には、SQLスクリプトを実行するだけです。 SSMSはスクリプトを作成して実行します。 –

+0

RedGateのようなサードパーティのツールを使ってcreate table文を見つけることができます。ソリューションにデータベースプロジェクトを関連付けると、別の方法で見つけることができます。これらの2つのケースでは、create table 'TableName'を検索できます。 –

答えて

0

テーブルが最近作成された場合は、デフォルトトレースから情報を収集できます。以下のクエリは、オブジェクト作成イベントと変更イベントをリストします。デフォルトトレースはロールオーバトレースであるため、フォレンジック情報はアクティビティに基づいて制限されます。

SELECT 
    trace.DatabaseName 
    ,trace.ObjectName 
    ,te.name AS EventName 
    ,tsv.subclass_name 
    ,trace.EventClass 
    ,trace.EventSubClass 
    ,trace.StartTime 
    ,trace.EndTime 
    ,trace.NTDomainName 
    ,trace.NTUserName 
    ,trace.HostName 
    ,trace.ApplicationName 
    ,trace.Spid 
FROM (SELECT REVERSE(STUFF(REVERSE(path), 1, CHARINDEX(N'\', REVERSE(path)), '')) + N'\Log.trc' AS path 
    FROM sys.traces WHERE is_default = 1) AS default_trace_path 
CROSS APPLY fn_trace_gettable(default_trace_path.path, DEFAULT) AS trace 
JOIN sys.trace_events AS te ON 
    trace.EventClass=te.trace_event_id 
JOIN sys.trace_subclass_values AS tsv ON 
    tsv.trace_event_id = EventClass 
    AND tsv.subclass_value = trace.EventSubClass 
WHERE te.name IN(N'Object:Altered', N'Object:Created') 
    AND tsv.subclass_name = 'Commit' 
ORDER BY trace.StartTime; 
関連する問題