のSQLServer上の表のDML履歴を監視することが可能と安全です

:彼は私のテスト段階である


テストenviroumentで、私はテーブル「test」を作る/

デモテーブル:
テーブルテスト(nvharchar(100))を作成します。

トリガーレコードテーブル:
。CREATE TABLEの[DBO] [DMLEVENTS](
[EVENTDATE] [日時] NOT NULL DEFAULT(GETDATE())、
[イベントタイプ] [データ型はnvarchar(64)NULL、
[EventDML] [データ型はnvarchar(max)はNULL 、
[EventXML] [XML] NULL、
[データベース名] [データ型はnvarchar(255)NULL、
[のSchemaName] [データ型はnvarchar(255)NULL、
[ObjectNameの] [NVARCHAR(MAX)NULL、
[ホスト名] [VARCHAR](64 )NULL、
[たIPAddress] [VARCHAR(32)NULL、
[のProgramName] [データ型はnvarchar(255)NULL、
[LoginNameに] [データ型はnvarchar(255)NULL
)ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

そのテーブルのDMLトリガー:
[DBO] TRIGGERを作成または変更[DMLTrigger_Sample]
ON [DBO] [テスト]。
挿入した後、削除、更新が

AS
BEGIN
SET NOCOUNT ONと、
SET ANSI_WARNINGS OFF。
DECLARE
@EventData XML = EVENTDATA()。

DECLARE
VARCHAR @ip(32)=

SELECT client_net_address
sys.dm_exec_connections FROM
WHERE SESSION_ID = @@ SPID
)。


DECLARE
SQL1 VARCHAR(MAX)= @

選択t.text
sys.sysprocessesから
交差適用sys.dm_exec_sql_text(たsql_handle)T
ここで、SPID = @@ SPID
)。


INSERT dbo.DMLEvents

-イベントタイプ、
- EventDML、
- EventXML、
データベース名、
-のSchemaName、
ObjectNameの、
ホスト名、
たIPAddress、
のProgramName、
LoginNameに

SELECT
- @ EventData.value( '(/ EVENT_INSTANCE / TYPEDESC)[1]'、 'NVARCHAR(100)' )、
- @ EventData.value( '(/ EVENT_INSTANCE / TSQLCommand)[1]'、 'NVARCHAR(MAX)')、
- @EventData、
DB_NAME()、
- @ EventData.value( '(/ EVENT_INSTANCE / SchemaName)[1]」、 'NVARCHAR(255)')、
- @ EventData.value( '(/ EVENT_INSTANCE /のObjectName)[1]'、 'NVARCHAR(255)')、
SQL1、@
HOST_NAME()、
@ IP、
PROGRAM_NAME()、
SUSER_SNAME();
END

GOは、


我々はcontineにあります。

インスタンスの監査は、

サーバーAUDIT [OurAudit] CREATE
TOファイル
':(\ mssql_audit \ FILEPATH = N'C
、MAXSIZE = 0メガバイト
、MAX_ROLLOVER_FILES = 2147483647
、RESERVE_DISK_SPACE = OFF

WITH
(QUEUE_DELAY = 1000
、ON_FAILURE = CONTINUE
、AUDIT_GUID = 747fc00d-'を2745-4705-9a94-6c9fb6dea9bc」

ALTER SERVER監査[OurAudit] WITH(STATE = ON)
GO

特別なデータベース特殊テーブル監査:

データベース監査仕様を作成[OurAudit_test]
のサーバ・AUDIT [OurAudit]
ADD(DELETE ONのOBJECT :: [DBO [パブリックBY]。[テスト]])、
ADD(INSERTオンOBJECT :: [DBO]。[テスト] [パブリックBY])、
[パブリックBY ADD(OBJECT ON UPDATE :: [DBO]。[テスト]])
(STATE = ON)で
GO

ここでは、開始:

(1)デモ日付挿入

テスト値( 'ghgh')への挿入を
選択*テストからの
結果はghgh (2)監査レコードを選択:[DMLEVENTS] SELECT * FROM - - SELECT DATEADD(HH、DATEDIFF(HH、GETUTCDATE()、CURRENT_TIMESTAMP)、EVENT_TIME)corrected_time、などaction_id、session_server_principal_name、SERVER_INSTANCE_NAME、データベース名、schema_nameに、object_nameの、声明、fn_get_audit_file FROM file_nameに(「C:\ mssql_audit \ OurAudit_ *。 sqlaudit」、DEFAULT、DEFAULT); 私は何を見ることができますか?




















 

おすすめ

転載: www.cnblogs.com/partition-liu/p/12318274.html