如何Audit表的栏位被谁更新

问题:

Sql server数据库中一table的一个栏位每天会被update,如何查能查到是哪个程序做的?

SQL Server中可用sql trace去跟踪,但只能跟踪目前的session,所以只能写一Trigger去记录当时的情况(对于 oracle 来说可以用logminer去分析归档日志来实现,当然也可以写Trigger去实现),测试如下:

创建测试表并添加测试数据:

CREATE TABLE TR_TEST

(Id INT,

FullName VARCHAR(20)

)

INSERT INTO TR_TEST

VALUES(1,’BrightWen’)

INSERT INTO TR_TEST

VALUES(2,’HONGSU’)

创建Log表:

CREATE TABLE TR_TESTLOG

(LogDate DATETIME,

AuditType VARCHAR(6),

HostName VARCHAR(128),

AppName VARCHAR(250),

Value VARCHAR(20)

)

现在我要稽核栏位FullName被修改的情况:

CREATE TRIGGER TR_Audit ON TR_TEST

FOR UPDATE

AS

IF UPDATE(FullName) AND @@ROWCOUNT > 0

BEGIN

INSERT TR_TESTLOG
SELECT GETDATE(),’Old’,HOST_NAME(),APP_NAME(),FullName
FROM Deleted
INSERT TR_TESTLOG
SELECT GETDATE(),’New’,HOST_NAME(),APP_NAME(),FullName
FROM INSERTED

END

测试:

UPDATE TR_TEST SET FullName = ‘HONGSU1′ WHERE ID =2

SELECT * FROM TR_TESTLOG

LogDate AuditType HostName AppName Value
———————— ——— ———– —————— ———————- ——————–
2006-01-19 14:08:12.080 Old BRIGHTWEN SQL Query Analyzer HONGSU
2006-01-19 14:08:12.090 New BRIGHTWEN SQL Query Analyzer HONGSU1

  

No Comments

Be the first to comment on this entry.

Leave a comment

Name(required)
Mail (will not be published)(required)
Website

Fields in bold are required. Email addresses are never published or distributed.

Some HTML code is allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs must be fully qualified (eg: http://www.dbifan.com),and all tags must be properly closed.

Line breaks and paragraphs are automatically converted.

Please keep comments relevant. Off-topic, offensive or inappropriate comments may be edited or removed.

    搜索本站

    站点日历

    1月 2006
    « 12   2 »
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  

    订阅本站

    文章分类

    最新日志

    热点文章

    日志存档

    常用标签