克拉玛依住房和建设局网站,成立网站开发公司,单页网站网址,网页首页设计图片本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核#xff0c;通过具体的内容向大家展现#xff0c;希望对大家学习SQLServer数据库有所帮助。介绍Audit是SQL Server 2008之后才有的功能#xff0c;它能告诉你“谁什么时候做了什么事情”。具体是指审核SQL …本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核通过具体的内容向大家展现希望对大家学习SQLServer数据库有所帮助。介绍Audit是SQL Server 2008之后才有的功能它能告诉你“谁什么时候做了什么事情”。具体是指审核SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件。它的底层是基于扩展事件(Extented Event)所以其性能和灵活性相对较好。审核数据可以输出到审核文件、Windows安全日志和应用程序日志。Audit都需要创建一个实例级的“SQL Server审核”然后可以创建从属于它“服务器审核规范”和“数据库审核规范”。可以理解“SQL Server审核”是审核的顶级容器这两个“规范”是定义要审核的具体内容。创建和使用审核的一般过程1. 创建审核并定义目标。2. 创建映射到审核的服务器审核规范或数据库审核规范并启用审核规范。3. 启用审核。4. 通过使用 Windows“事件查看器”、“日志文件查看器”或 fn_get_audit_file 函数来读取审核事件。实现创建测试数据库和数据use mastergocreate database AuditTestgouse AuditTestgocreate table tb(ID int primary key ,name varchar(20),weight decimal(10,2));insert into tb values(1,John,70.2),(2,Ted,80.8),(3,Clark,75.1)go1. 创建审核和定义目标。创建审核可以用SSMS或者语句实现。所谓目标就是审核输出存到哪里与扩展事件的Target差不多。对应的语句创建--create Server AuditUSE [master]GOCREATE SERVER AUDIT [Audit-AuditTest]TO FILE( FILEPATH ND:\share,MAXSIZE 50 MB,MAX_FILES 10,RESERVE_DISK_SPACE ON)WITH( QUEUE_DELAY 1000,ON_FAILURE CONTINUE--AUDIT_GUIDuniqueidentifier)--WHERE object_nametbGO--Enable Server Auditalter server audit [Audit-AuditTest] with (stateon)简单说明一下相关参数TO FILE:指定输出到审核文件也可以指定为Security Log和Application Log。FILEPATH审核文件的目录地址。MaxSize单个审核文件的最大容量。MAXSIZE类似于Trace,指定Rollover允许最多文件数。RESERVE_DISK_SPACE预先分配审核文件到MaxSize。个人推荐启用。QUEUE_DELAY指定事件发生到被强制审核的毫秒间隔。指定为0则为同步审核。ON_FAILURE 当审核向上档写入数据失败时接下来会采取的行为CONTINUE | SHUTDOWN | FAIL_OPERATION。AUDIT_GUID用于数据库镜像。类似Login的SID作用镜像会话的主库如果有审核则在镜像库创建对应的审核需要指定同样GUID。WHERE相当于扩展事件中Predicate用于指定过滤条件。2. 创建数据库审核规范并启用之指定从属于哪个SQL Server审核和定义出要审核的内容。可以通过SSM或者语句创建之。下面针对测试表tb创建审核规范任何人对tb表的DML和表结构修改操作都被审核。对应的语句--Create and enable Database Audit SpecificationUSE [AuditTest]GOCREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-AuditTest]FOR SERVER AUDIT [Audit-AuditTest]ADD (SCHEMA_OBJECT_CHANGE_GROUP),ADD (SELECT,DELETE,INSERT,UPDATE ON OBJECT::[dbo].[tb] BY [public])WITH (STATEON)GO对照SSMS参数的意义就很明白了。更详细内容参考CREATE DATABASE AUDIT SPECIFICATION审核活动类型(Audit Action Type)参考SQL Server 审核操作组和操作3. 启用审核SQL Server在创建审核和审核规范时默认是不启用需要显式启用。在前面两步我已经显式启用了。4. 测试和查看审核数据use AuditTestgoselect * from dbo.tbwhere ID1;update dbo.tbset nameTed_Newwhere ID2;alter table dbo.tb alter column name varchar(30);alter table dbo.tb add newCol varchar(20);go在前面目标定义的文件中会生成一个审核文件文件名[SQL Server审核名称]_[审核的GUID]_*.sqlaudit。这个文件也可以用其它文字编辑器打但是不便阅读。通常使用系统函数sys.fn_get_audit_file读取它。SELECT event_time, action_id, succeeded, session_id, session_server_principal_name, object_name, statement, file_name, audit_file_offsetfrom sys.fn_get_audit_file(d:\share\*,default,default)从结果可以得到谁在什么时候做了什么。Select和Alter语句只有一条记录。Update有两条记录一条Select和一条Update。将audit_file_offset的值传递给fn_get_audit_file作为第三个参数值可以实现从指定的offset读取审核文件。注意event_time输出为UTC时间了。当然也可以直接查看5. 尝试服务器审核规范审核创建和删除登录并将审核内容记录到应用程序日志。USE [master]GOCREATE SERVER AUDIT [Audit-AuditTest]TO APPLICATION_LOGWITH( QUEUE_DELAY 1000,ON_FAILURE CONTINUE)GOAlter SERVER AUDIT [Audit-AuditTest] With(StateOn)goCreate Server Audit Specification SAS_CreateDropLoginFor Server Audit [Audit-AuditTest]Add (SERVER_PRINCIPAL_CHANGE_GROUP)With (StateOn)gocreate login xx with passwordPssW0rd;drop login xx ;通过Windows的事件查看器可以查看到33205事件。个人觉得在查看数据详细事件时使用XML格式更好理解一些。总结1. SQL Server审核相对而言性能影响较少审核粒度也非常灵活。2. 审核是针对“事件“回答”谁什么时候干了什么“但对数据本身变化的跟踪力度较弱。3. 审核的目标结果无论是审核文件或者应用程序日志都需要另外处理和分析才能得想要的内容。本文由职坐标整理并发布希望对同学们学习SQL Server有所帮助更多内容请关注职坐标数据库SQL Server数据库频道