用触发器生成数据库表的数据操作日志
--写到文本文件 exec master.dbo.xp_cmdshell @CmdString 让我们对它进行测试,先运行前面的插入语句,然后打开C:\logtest.log文件查看结果: Insert into tablefortrigger(lastname, firstname) Values(''Doe'', ''John'') 问题解决了,对不对?哦,还没完全解决。发生多次重复插入的事件是什么原因?在这个例子中,你必须分别地处理每条记录。为了达到这个目的,我们必须用一个会带来麻烦的游标来访问"隐蔽面"。在执行以前,我必须预先给予警告。你应当了解的是,当这个应用程序进行大规模地记录插入、更新或删除时要当心,因为它可能会耗费大量的内存。 像你从下面看到的一样,这次我们在前面那个例子的基础上稍加调整,引入了一个游标,对该插入表的全部记录进行循环读取。每条记录分别插入一条线条,将各个事件区分开来。
现在让我们执行重复多次插入测试:
结论 在继续完成之前,有些人认为必须考虑性能与安全问题。你将看到写入文本文件的开销,而对于一个每分钟处理5000项事务的数据库来说,这样大的开销也许不可接受。由于xp_cmdshell是在SQL外操作的,写入到文件的错误不会回滚事务。倘若入侵者使用一个隐蔽的途径来改变你的数据,这个事件不会被登记到那个文本文件中。不过事件日志将记录该次DML改动。作为一次最好的实践,各事件的编号应该被用于对照日志文件的各行记录,以便发现所有的差异。 有很多种方法可以达到本文目标,上述脚本也可以有许多的变化。我希望你能接受这个脚本,然后作出改进并提出建议,使它更有效率。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |