私は不思議なことに消滅している外部キーを持つSQL Server 2008 DBを持っています。 DBには、多数のカスタム構築ソフトウェア、MS Excelクエリ、およびSQL Server Management Studioからアクセスできます。外部キーがデータベースに追加、変更、または削除されたときに、何らかのログ/監査を設定したいと思います。それをどうやってやりますか?理想的には、変更はSQLテーブルに書き込まれ、誰が変更を行ったのかを特定するのに役立ちます。SQL Serverの外部キー監査/追跡
1
A
答えて
1
一つのテーブルを作成するには、データベースへの変更を保存するためのトリガーを作成することができます。 記事全文:http://www.sqlbook.com/sql-server/using-ddl-triggers-in-sql-server-to-audit-database-objects/
CREATE TRIGGER AuditProcChanges
ON DATABASE
FOR CREATE_PROC, ALTER_PROC, DROP_PROC, CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
DECLARE @ed XML
SET @ed = EVENTDATA()
INSERT INTO DDLAudit (PostTime, DatabaseName, Event, ObjectName, TSQL, Login)
VALUES
(
GetDate(),
@ed.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@ed.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@ed.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
@ed.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'),
@ed.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)
0
スティーブンは私の質問に対する答えを上記のコメントで提供しました。彼が答えとしてそれを提出すれば、私は受け入れられた答えにそれを切り替えるでしょう。つまり、追跡したいDBにDDL監査テーブルを追加し、Create/Alter/Drop Tableステートメントを実行したときにDBトリガーを追加しました。私が実行したクエリは以下の通りです:
USE DBName
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[DDLAudit](
[RowID] [int] IDENTITY(1,1) NOT NULL,
[PostTime] [datetime] NULL,
[DatabaseName] [varchar](256) NULL,
[Event] [nvarchar](100) NULL,
[ObjectName] [varchar](256) NULL,
[TSQL] [nvarchar](2000) NULL,
[Login] [varchar](256) NULL,
CONSTRAINT [PK_DDLAudit] PRIMARY KEY CLUSTERED
(
[RowID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
CREATE TRIGGER AuditProcChanges
ON DATABASE
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
DECLARE @ed XML
SET @ed = EVENTDATA()
INSERT INTO DDLAudit (PostTime, DatabaseName, Event, ObjectName, TSQL, Login)
VALUES
(
GetDate(),
@ed.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@ed.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@ed.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
@ed.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'),
@ed.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)
1
関連する問題
- 1. トリガーベースのSQL Server監査
- 2. 監査証跡テクニック
- 3. のSQL Server:外部キー
- 4. SQL Serverフレキシブル外部キー
- 5. 監査証跡表のトリガー
- 6. EntityFramework.Extended監査 - 外部キーのプロパティIsRelationship常にfalse
- 7. SQL Server 2016の監査機能
- 8. SQL Serverのデータベーススキーマやコンプライアンス監査ツール
- 9. SubSonic 3.0.0.3 |データアクセスレイヤー - 監査証跡
- 10. SQL Serverの値ベースの外部キー
- 11. SQL Server 2005の外部キーとインデックス
- 12. SQL Serverの:制約と外部キー
- 13. 外部キーのSQL Server 2016(MSG 1769)
- 14. SQL Server - プライマリキーと外部キーの関係
- 15. SQL Serverの複合外部キー
- 16. SQLサーバードッカーコンテナの監査
- 17. msでの監査証跡からのスナップショットテーブルsql
- 18. 監査証跡とHIPAAベストプラクティスの実装
- 19. JSP画面フィールドの監査証跡
- 20. 監査証跡トリガーの更新句
- 21. ASP.NETでSQL Serverに外部キーを追加する方法C#
- 22. Linux監査システムによるウェブシェル攻撃の追跡
- 23. MVC 4 - 訪問者の監査と追跡
- 24. Hibernate SQL監査ログ
- 25. Windows Server 2003ユーザーログオン監査
- 26. SQL Server変更追跡データサイズ
- 27. 私の監査証跡は、私は私の監査証跡の取得に問題が生じています
- 28. SQL外部キー
- 29. SQL外部キー
- 30. SQL外部キー
http://www.sqlbook.com/sql-server/using-ddl-triggers-in-sql-server-to-audit-database-objects/ – Stivan
私はできませんこれを答え(スタックオーバーフローに関する新機能)としてマークしているようですが、この記事の例では、制約の変更を含むCreate、Alter、およびDropのテーブルステートメントのログをどのように記録できるかを示しています。 – fireflyfiend