none
テーブル作成者の記録方法 RRS feed

  • 質問

  • テーブル作成者(ログインユーザー)の記録方法・取得方法について教えて下さい。

    以前、私がした質問で、DDLトリガーを用いれば「Create Table」時にはログインユーザーを記録することができると分かりました。

    しかしテーブルを作成する方法は他にも
    「sp_rename」
    等があります。
    このコマンドでテーブル作成したときにはDDLトリガーは起動しませんでした。
    (「Select Into」時にはDDLトリガは起動しました。)

    そこで、sys.objects(またはsys.tables)にInsertトリガーを付けて作成ユーザーを記録しようと思ったのですが、
    これらにはそもそもトリガーが付けれないようです。

    何か良い方法はないでしょうか?
    よろしくお願い致します。

    環境:SQLSERVER2014
    前提:スキーマはdboのみ
    方針:テーブル名と作成ユーザーを記録するテーブルは予め作成する予定


    2015年2月19日 13:23

回答

すべての返信

  • つまるところ監査 (Audit) を行いたいということのように見受けられますが、どうでしょう?

    以下を参考にスキーマの変更 (DATABASE_OBJECT_CHANGE_GROUP) あたりを監査すると漏れなく記録を取れます。
    きちんと設計、設定すれば J-SOX や PCI DSS にも対応できるところまで漏れなく記録できます。
    https://technet.microsoft.com/ja-jp/library/cc280663.aspx

    バージョンが 2012 になりますが、以下に GUI での操作方法がスクリーンショットつきの手順で紹介されているので、一度ご確認、お試しいただくとイメージが沸きやすいかと思います。
    http://www.sqlquality.com/Self2012/Self2012_Security/Text/Step04-01.html


    MCITP(Database Developer/Database Administrator)


    2015年2月19日 13:52
  • お返事ありがとうございます。

    監査がしたいというわけではなく、誰がどのテーブルを作成したのかの記録を取っていきたいのです。

    セキュリティの監査は使えない(使用しない)という前提でもお願い致します。


    2015年2月19日 14:12
  • とりあえず、sp_renameに関してですが、確かにDDLトリガーは発生しないようです。しかし、代わりにrenameイベントが使えるようです。

    (参考)
    SQL Server DDL Triggers to Track All Database Changes
    http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2015年2月23日 2:43
    • 回答としてマーク shirarin0324 2015年2月24日 13:59
    2015年2月20日 8:25
  • DDLトリガーとrenameイベントでテーブル作成される全パターンをキャッチできました。

    アドバイスありがとうございます。

    2015年2月24日 13:59