一、概述
本篇文章主要介绍如何创建审计,以及该收集哪些审核规范。
二、常用的审核对象
2.1、服务器审核对象
1.failed_login_group( audit login failed event class)
指示主体尝试登录到 sql server,等效于 audit login failed event class,
比如:登入失败的操作
2.server_object_change_group(audit server object management)
针对服务器对象执行 create、alter 或 drop 操作时将引发此事件。等效于 audit server object management 事件类。
比如:删除链接服务器对象等凌驾于数据库级别以上的对象(权限除外)。
3.server_role_member_change_group
向固定服务器角色添加登录名或从中删除登录名时将引发此事件, 此事件由 sp_addsrvrolemember 和 sp_dropsrvrolemember 存储过程引发。 等效于 audit add login to server role event class。
比如:授予、撤销服务器角色等
4.server_principal_change_group
创建、更改或删除服务器主体时将引发此事件
比如:创建删除登入名等
5.successful_login_group
指示主体已成功登录到 sql server。 此类中的事件由新连接引发或由连接池中重用的连接引发。 等效于 audit login event class。
注意:每一个连接会话都会记录,开启successful_login_group会产生很多的记录
6.user_change_password_group
使用 alter user 语句更改包含数据库用户的密码时,测试发现无效
2.2、审核自身审核对象
audit_change_group
2.3、数据库审核对象
ddl相关
1.database_principal_change_group
在数据库中创建、更改或删除主体(如用户)时,将引发此事件。 等效于 audit database principal management event class。
比如:创建删除登入名等
2.database_role_member_change_group
向数据库角色添加登录名或从中删除登录名时将引发此事件。 此事件类与 sp_addrolemember、sp_changegroup 和 sp_droprolemember 存储过程一起使用。等效于 audit add member to db role 事件类
比如:授予、撤销服务器角色等
3.database_change_group(audit database management 事件)
创建、更改或删除数据库时将引发此事件。创建、更改或删除任何数据库时均将引发此事件。等效于 audit database management 事件类。
比如:删除创建数据库、修改数据库属性等数据库本身的修改操作
4.database_object_change_group(audit database object management 事件)
针对数据库对象(如架构)执行 create、alter 或 drop 语句时将引发此事件。创建、更改或删除任何数据库对象时均将引发此事件。等效于 audit database object management 事件类。
比如:serive broker相关对象、存储、安全等凌驾于用户创建的对象以上的对象(权限除外)。
5.schema_object_change_group( audit schema object management event class)
针对架构执行 create、alter 或 drop 操作时将引发此事件。等效于 audit schema object management 事件类。此事件针对架构对象引发。等效于 audit object derived permission 事件类。任何数据库的任何架构发生更改时,均将引发此事件。等效于 audit statement permission 事件类。
比如:表、存储过程、视图、函数、架构等对象。
dml相关
select、delete、insert、update
三、创建服务审核
1.创建审核
use [master]
go
----创建审核,命名规范auditserver_描述
create server audit [auditserver_all]
to file(
filepath= n'd:\audit\auditserver_all' ----文件路径
,maxsize = 2 gb
----文件最大大小,单位可以是mb、gb、tb
,max_files = 2147483647
----最大文件数,最大2147483647也就是无限制-----,max_rollover_files = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和max_files一起配置
,reserve_disk_space = on
----保留磁盘空间
)with(
queue_delay= 1000
----队列延时,默认1s
,on_failure = continue
----审核失败继续,还可以指定shutdown关闭数据库服务器,但是必须有相关权限
)go
注意:默认创建审核是禁用的,必须手动启用,同样修改审核之前也必须先禁用然后再修改。路径‘d:\audit\auditserver_all’必须事先创建好。
2.启用和禁用审核
---启用
use [master]
go
alter server audit auditserver_all with(state=on);---禁用
use [master]
go
alter server audit auditserver_all with(state=off);
3.创建审核规范
----创建服务器审核规范,命名规范:auditspecification_描述(和审核描述保持一致)
use [master]
go
createserver audit specification auditspecification_allforserver audit auditserver_alladd(failed_login_group),add(server_object_change_group),add(server_principal_change_group),add(server_role_member_change_group),add(audit_change_group)go
审核的事件包括:登入失败的操作、服务器级别对象的操作、创建删除登入用户、服务器角色的授予和撤销、对审核配置的操作。还有一些其它的审核类型暂时不做审计。其实这里也可以将将数据库级别的审核操作创建到服务器级别下,这样的话
4.启用和禁用审核规范
--启用
go
alter server audit specification auditspecification_all with(state=on);go
---禁用,注意作业会影响禁用
alter server audit specification auditspecification_all with(state=off);
5.测试
----创建登入名,并授予sysadmin角色
use [master]
go
create login [test] with password=n'123456', default_database=[master], check_expiration=off, check_policy=off
go
alter server role [sysadmin] add member [test]
go
四、创建数据库审核
1.创建数据库审核
use [master]
go
----创建审核,审核只能创建在服务器级别,命名规范auditdatabase_数据库名_描述
create server audit [auditdatabase_chenmh_allobjectchange]
to file(
filepath= n'd:\audit\auditdatabase_chenmh_allobjectchange'
----文件路径
,maxsize = 2 gb
----文件最大大小,单位可以是mb、gb、tb
,max_files = 2147483647
----最大文件数,最大2147483647也就是无限制-----,max_rollover_files = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和max_files一起配置
,reserve_disk_space = on
----保留磁盘空间
)with(
queue_delay= 1000
----队列延时,默认1s
,on_failure = continue
----审核失败继续,还可以指定shutdown关闭数据库服务器,但是必须有相关权限
)go
---启用
use [master]
go
alter server audit auditdatabase_chenmh_allobjectchange with(state=on);---禁用
use [master]
go
--alter server audit auditdatabase_chenmh_allobjectchange with(state=off);
注意:数据库审核也是创建在服务器级别,数据库审核规范是创建在具体的数据库下。
2.创建数据库审核规范
create databaseaudit;
go----创建数据库审核规范,命名规范:auditspecification_描述(和审核描述保持一致)
use [audit]
go
create databaseaudit specification auditspecification_allobjectchangeforserver audit auditdatabase_audit_allobjectchange---ddl相关操作
add(database_change_group),add(database_object_change_group),add(schema_object_change_group),add(database_principal_change_group),add(database_role_member_change_group),---dml相关操作,public代表所有用户
-----add (select on schema::[dbo] by public),
add (delete on schema::[dbo] by public),add (insert on schema::[dbo] by public),add (update on schema::[dbo] by public);go
--启用
use [audit]
go
alter database audit specification auditspecification_allobjectchange with(state=on);---禁用,注意作业会影响禁用
use [audit]
go
--alter database audit specification auditspecification_allobjectchange with(state=off);
注意:1.一个服务器审核可以对应多个数据库审核规范。
2.暂时不支持rpc调用的审核事件。
3.测试
use [audit]
go
create table a(id int not null);go
alter table a add name varchar(10);go
insert into a values(1,'a')go
delete from a where id=1;go
drop table a;
备注:审计记录的日期和使用getdate()查询的时间8个小时
五、查询
----查询审核日志
select * from sys.fn_get_audit_file('d:\audit\auditserverfile_66d8f97a-b495-4cb4-83ea-564d1ecf9988_0_131604628132230000.sqlaudit',default, default) asa--服务器审核相关视图
select * fromsys.server_auditsselect * fromsys.server_audit_specificationsselect * fromsys.server_audit_specification_detailsselect sa.name asauditname,
sa.type_descasstoretype,
sas.nameasauditspecificationsname,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_descasauditgradefrom sys.server_audits sa inner join sys.server_audit_specifications sas on sa.audit_guid=sas.audit_guidinner join sys.server_audit_specification_details sasd on sas.server_specification_id=sasd.server_specification_idleft join sys.dm_audit_actions daa on sasd.audit_action_id=daa.action_id and sasd.class_desc=daa.class_desc--数据库审核规范视图
select * fromchenmh.sys.database_audit_specificationsselect * fromchenmh.sys.database_audit_specification_detailsselect sa.name asauditname,
sa.type_descasstoretype,
sas.nameasauditspecificationsname,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_descasauditgradefrom sys.server_audits sa inner join chenmh.sys.database_audit_specifications sas on sa.audit_guid=sas.audit_guidinner join chenmh.sys.database_audit_specification_details sasd on sas.database_specification_id=sasd.database_specification_idleft join sys.dm_audit_actions daa on sasd.audit_action_id=daa.action_id and sasd.class_desc=daa.class_desc----
select * from sys.dm_audit_actions where action_id='dl'
六、删除
--删除服务器审核规范,先禁用才能删除
use [master]
go
alter server audit specification auditspecification_all with (state=off)go
dropserver audit specification auditspecification_allgo
--删除服务器审核对象,先禁用才能删除
use [master]
alter server audit auditserver_all with (state=off)go
drop server audit auditserver_all;
七、在alwayson中创建审核
1.创建服务器级别审核
和在单实例上创建审核一样,主副本和辅助副本都需要创建。
2.创建数据库级别审核
先在主副本中执行
use [master]
go
----创建审核,审核只能创建在服务器级别,命名规范auditdatabase_数据库名_描述
create server audit [auditdatabase_audit_allobjectchange]
to file(
filepath= n'c:\audit\auditdatabase_audit_allobjectchange'
----文件路径
,maxsize = 2 gb
----文件最大大小,单位可以是mb、gb、tb
,max_files = 2147483647
----最大文件数,最大2147483647也就是无限制-----,max_rollover_files = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和max_files一起配置
,reserve_disk_space = on
----保留磁盘空间
)with(
queue_delay= 1000
----队列延时,默认1s
,on_failure = continue
----审核失败继续,还可以指定shutdown关闭数据库服务器,但是必须有相关权限
)go
---启用
use [master]
go
alter server audit auditdatabase_audit_allobjectchange with(state=on);---禁用
use [master]
go
--alter server audit auditdatabase_audit_allobjectchange with(state=off);
create databaseaudit;go
----创建数据库审核规范,命名规范:auditspecification_描述(和审核描述保持一致)
use [audit]
go
create databaseaudit specification auditspecification_allobjectchangeforserver audit auditdatabase_audit_allobjectchange---ddl相关操作
add(database_change_group),add(database_object_change_group),add(schema_object_change_group),add(database_principal_change_group),add(database_role_member_change_group),---dml相关操作,public代表所有用户
-----add (select on schema::[dbo] by public),
add (delete on schema::[dbo] by public),add (insert on schema::[dbo] by public),add (update on schema::[dbo] by public);go
--启用
use [audit]
go
alter database audit specification auditspecification_allobjectchange with(state=on);
在辅助副本执行
-------========================创建服务器审核=======================
use [master]
go
----创建审核,命名规范auditserver_描述
create server audit [auditserver_all]
to file(
filepath= n'c:\audit\auditserver_all\' ----文件路径
,maxsize = 2 gb
----文件最大大小,单位可以是mb、gb、tb
,max_files = 2147483647
----最大文件数,最大2147483647也就是无限制-----,max_rollover_files = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和max_files一起配置
,reserve_disk_space = on
----保留磁盘空间
)with(
queue_delay= 1000
----队列延时,默认1s
,on_failure = continue
----审核失败继续,还可以指定shutdown关闭数据库服务器,但是必须有相关权限
)go
---启用服务器审核
use [master]
go
alter server audit auditserver_all with(state=on);---------================创建服务器审核规范====================
use [master]
go
createserver audit specification auditspecification_allforserver audit auditserver_alladd(failed_login_group),add(server_object_change_group),add(server_principal_change_group),add(server_role_member_change_group),add(audit_change_group)go
--启用
go
alter server audit specification auditspecification_all with(state=on);go
------------============================创建数据库基本审核规范=====================================================
use [master]
go
----创建审核,审核只能创建在服务器级别,命名规范auditdatabase_数据库名_描述
create server audit [auditdatabase_audit_allobjectchange]
to file(
filepath= n'c:\audit\auditdatabase_audit_allobjectchange'
----文件路径
,maxsize = 2 gb
----文件最大大小,单位可以是mb、gb、tb
,max_files = 2147483647
----最大文件数,最大2147483647也就是无限制-----,max_rollover_files = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和max_files一起配置
,reserve_disk_space = on
----保留磁盘空间
)with(
queue_delay= 1000
----队列延时,默认1s
,on_failure = continue
----审核失败继续,还可以指定shutdown关闭数据库服务器,但是必须有相关权限
)go
---启用
use [master]
go
alter server audit auditdatabase_audit_allobjectchange with(state=on);-----===============关联数据库审核规范与服务器审核====================
use [audit]
go
----禁用数据库审核规范
alter database audit specification auditspecification_allobjectchange with(state=off);go
---将数据库审核规范关联服务器审核
alter databaseaudit specification auditspecification_allobjectchangeforserver audit auditdatabase_audit_allobjectchangewith (state =on)go
----启用数据库审核规范
alter database audit specification auditspecification_allobjectchange with(state=on);
八、总结
审核是数据库规范的一部分,在安全审计方面也非常的重要,建议生产系统都必须创建审核,下面为大家推荐一款数据库安全审计系统,它是面向数据库运维人员和安全管理人员,针对数据库风险状况、运行状况、性能状况和语句分布状况提供实时监控能力,是一款面向数据库可提供安全、审计、监控能力的一体化工具:
【安华金和数据库安全审计系统简介】
数据库审计系统率先倡导【免实施、免维护、免培训】的产品易用性设计原则。在满足合规性审计的同时,给用户带来愉悦的产品交互体验。产品适用于实体机环境和虚拟化网络,可基于流量识别自动发现并添加数据,并提供可视化的运行状态监控,针对网络内未知的数据库信息进行有效梳理,以解决现场网络环境复杂、数据库资产不清晰等问题。产品设计基于“用户视角”,秉承“一钻到底”的界面交互原则。引导用户从全局视角,向数据库组、数据库做“递进式”分析;并提供 20 多种查询条件、层层筛选,帮助用户快速聚焦风险源,高效完成审计日志分析和风险定位。
数据库审计系统提供默认风险规则,例如:sql 语句黑白名单规则、客户端访问规则、账户口令攻击监控、dml/dcl 操作类规则、批量数据导入/导出规则,可适用于运维的数据库安全管控。
数据库审计产品支持但不应局限于数据库运维侧的安全监控。面向外部应用访问,系统提供漏洞攻击检测、sql 注入检测能力,默认提供 400 多种默认规则;针对应用系统访问,可提供应用关联审计和应用关联规则,追溯应用账户安全,实现应用侧数据库安全加固。
信息系统的核心数据存在数据库中的,数据库是用户核心数据资产载体。系统可审计的数据库类型涵盖国内外 12 种主流数据库。为适应大数据分析的市场需求,针对hbase、mongodb 等分布式、非关系型数据库,提供完善的审计与监控能力。
试用申请