トップ回答者
テーブル作成者の記録方法

質問
-
テーブル作成者(ログインユーザー)の記録方法・取得方法について教えて下さい。
以前、私がした質問で、DDLトリガーを用いれば「Create Table」時にはログインユーザーを記録することができると分かりました。
しかしテーブルを作成する方法は他にも
「sp_rename」
等があります。
このコマンドでテーブル作成したときにはDDLトリガーは起動しませんでした。
(「Select Into」時にはDDLトリガは起動しました。)
そこで、sys.objects(またはsys.tables)にInsertトリガーを付けて作成ユーザーを記録しようと思ったのですが、
これらにはそもそもトリガーが付けれないようです。
何か良い方法はないでしょうか?
よろしくお願い致します。
環境:SQLSERVER2014
前提:スキーマはdboのみ
方針:テーブル名と作成ユーザーを記録するテーブルは予め作成する予定
- 編集済み shirarin0324 2015年2月19日 13:32
回答
-
とりあえず、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
すべての返信
-
つまるところ監査 (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)
- 編集済み nagino - 引退エンジニア 2015年2月19日 13:56
-
お返事ありがとうございます。
監査がしたいというわけではなく、誰がどのテーブルを作成したのかの記録を取っていきたいのです。
セキュリティの監査は使えない(使用しない)という前提でもお願い致します。
- 編集済み shirarin0324 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