接上文: SQL Server 安全篇——SQL Server 审核(2)——审核实操 ,很多时候,原生的审核功能并不能完全满足需求,这个时候,就可以使用服务器审核规范或者数据库审核规范来捕获USER_DEFINED_AUDIT_GROUP审核操作组,然后手动在应用程序中触发。
自定义服务器审核和数据库审核规范:
下面脚本获取USER_DEFINED_AUDIT_GROUP操作组,针对的是AdventureWorks2017中的Person.Person表。如果对脚本不熟悉,可以先回看前面两节。
USE Master GO CREATE SERVER AUDIT [Audit-Custom] TO FILE ( FILEPATH = 'E:\Audit' ,MAXSIZE = 256 MB ,MAX_ROLLOVER_FILES = 2147483647 ,RESERVE_DISK_SPACE = OFF ) WITH ( QUEUE_DELAY = 1000 ,ON_FAILURE = CONTINUE ) ; GO CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-Custom] FOR SERVER AUDIT [Audit-Custom] ADD (USER_DEFINED_AUDIT_GROUP) WITH (STATE = ON) ; GO ALTER SERVER AUDIT [Audit-Custom] WITH (STATE = ON) ; USE AdventureWorks2017 GO CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-Custom] FOR SERVER AUDIT [Audit-Custom] ADD (DELETE ON OBJECT::Person.Person BY public) ; ALTER DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-Custom] WITH (STATE = ON) ;
成功后的样子:
触发事件:
使用sp_audit_write系统存储过程来调起自定义事件。其参数说明如下:
参数 | 说明 |
@user_defined_event_id | 指定用户自定义事件的ID |
@succeeded | 定义事件是否成功:0为失败,1为成功 |
@user_defined_information | 定义事件的描述 |
这个sp可以在存储过程或这触发中调用,比如在触发器中触发事件:
CREATE TRIGGER FireCustomEvent ON Person.Person AFTER INSERT AS BEGIN IF (SELECT COUNT(*) FROM Inserted) > 5 BEGIN EXEC sys.sp_audit_write 1, 1, 'More than 5 items order' ; END END ;
但是注意触发器会降低性能。
总结:
SQL Server审核可以提供复杂、轻量级的审核机制。用于记录特权用户对数据库的非授权操作。对审核的合理使用可以减轻很多不必要的工作量。通过对USER_DEFINED_AUDIT_GROUP审核操作组的使用,可以进行用户自定义的事件审核。从而更丰富整个审核体系。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。