SQL学习--00002--LogonTrigger--20110418

    技术2022-05-19  21

    今天在SSC上看到一篇文章,介绍用Logon Trigger实现类似mySQL那样控制客户端IP的方法  Blocking Users by IP

    觉得挺好玩的,想继续深化一下,于是就开始研究Logon Trigger。

    这个Logon Trigger好像是2008才开始有的,由于我的机器直接装的是2008R2,2008里到底有没有就不知道了。

     

     

    简单的测试了一下,却发现一个问题(不知道是不是问题,反正在我的机器上是有问题的):

    1、创建了一个For/After Logon Trigger

    2、Trigger里的内容就是把 SYSTEM_USER、EventData()记录到一张表里

    具体的代码如下:

    1、用于记录SYSTEM_USER、EventData()的表(数据库DBADB是我自己用的)

    --*************************************************** --创建日志表,用于记录系统里每一个TRIGGER的EVENTDATA() --*************************************************** USE DBADB GO --TRUNCATE TABLE tbl_Trg_Log_EventData CREATE TABLE tbl_Trg_Log_EventData( ID int identity(1,1), Trg_Name varchar(200), DB_User varchar(200), Event_Data xml, insertdt datetime DEFAULT(GETDATE()), CONSTRAINT PK_tbl_Trg_Server_Log_EventData PRIMARY KEY(ID) ) 

    2、创建After Logon Trigger

    --*************************************************** --创建After Logon TRIGGER,用于监控后记录登录信息 --*************************************************** USE master GO IF EXISTS (SELECT * FROM sys.server_triggers WHERE name = 'Trg_Server_AfterLogon') DROP TRIGGER Trg_Server_AfterLogon ON ALL SERVER; GO CREATE TRIGGER Trg_Server_AfterLogon ON ALL SERVER AFTER LOGON AS BEGIN SET NOCOUNT ON; INSERT INTO DBADB.dbo.tbl_Trg_Log_EventData(Trg_Name,DB_User,Event_Data) VALUES('Trg_Server_AfterLogon',SYSTEM_USER,EVENTDATA()); END;  

    3、查看结果

    SELECT * FROM DBADB.dbo.tbl_Trg_Log_EventData WHERE Trg_Name = 'Trg_Server_AfterLogon' ORDER BY ID DESC

     

    问题出现了!

     

    创建好Trigger后,New Query的时候,在表里会插入2条记录(有时会是5条记录)!

    这些记录之间的间隔都非常短,如下图:

     

     

    为什么呢?????

     

    答案我也在寻找当中,如果你知道,请早点告诉我 :)

     

    非常感谢~~~!!!~!~!~!~!~!


    最新回复(0)