SQL Server审计功能(Audit)是SQL Server 2008之后才有的功能,审计(Audit)用于追踪和记录SQL Server实例,或者单个数据库中发生的事件(Event),审计运作的机制是通过捕获事件(Event),把事件包含的信息写入到事件日志(Event Log)或审计文件(Audit File)中,为review提供最真实详细的数据。
Audit都需要创建一个实例级的“SQL Server审核”,然后可以创建从属于它“服务器审核规范”和“数据库审核规范”。可以理解“SQL Server审核”是审核的顶级容器,这两个“规范”是定义要审核的具体内容。
创建和使用审核的一般过程:
官方手册参考:https://learn.microsoft.com/zh-cn/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16
下面以SQL Server2019为例,启用审核功能,具体配置过程如下:
“SQL Server 审核” 对象收集单个服务器实例或数据库级操作和操作组以进行监视。 这种审核处于 SQL Server 实例级别。 每个 SQL Server 实例可以具有多个审核。
定义审核时,将指定结果的输出位置,这是审核的目标位置。目标位置支持三种,分别是文件、windows安全事件日志、windows应用程序事件日志。 审核是在 禁用 状态下创建的,因此不会自动审核任何操作。 启用审核后,审核目标将从审核接收数据。
创建审核可以通过SSMS界面化配置,也可通过执行SQL语句实现。
(1)创建一个审核,名为 Audit-logfile,目标位置为文件(审核结果文件存放在c:\dbaudit路径中),通过SSMS界面化配置方法如下:
用管理员账号登录SQL Server管理工具(SQL Server Management Studio),在“安全性”-“审核”菜单上,右键-“新建审核”,如下图:
新建审核界面如下图:
点击“确定”即可创建一个审核,创建后在“安全性”-“审核”下面多了一个名为“Audit-logfile”的审核配置,默认是未启用状态(红色的叉号表示未启用,若想启用审核,可右键点击,选择启用审核即可),如下图:
对应的通过SQL语句方式创建审核的语句如下:
USE [master] GO CREATE SERVER AUDIT [Audit-logfile] TO FILE ( FILEPATH = N'C:\dbaudit\' ,MAXSIZE = 1024 MB ,MAX_FILES = 100 ,RESERVE_DISK_SPACE = ON ) WITH ( QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE ) ALTER SERVER AUDIT [Audit-logfile] WITH (STATE = OFF) GO
如下图,执行sql语句后,会在左侧“安全性”-“审核”下面生成一个名为“Audit-logfile”的配置:
SQL语句中相关参数说明如下:
启用审核后,在服务器 C:\dbaudit 路径下会生成一个 审计日志文件(Audit-logfile),如下图:
文件为sqlaudit类型(不可读,后面需要通过sql语句进行查询:select * from sys.fn_get_audit_file(‘C:\dbaudit*’,default,default))
(2)创建一个审核,名为 Audit-log,目标位置为windows应用程序日志(审核结果写在windows应用程序事件中),通过SSMS界面化配置方法如下:
通过sql语句创建如下:
USE [master] GO CREATE SERVER AUDIT [Audit-log] TO APPLICATION_LOG WITH ( QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE ) ALTER SERVER AUDIT [Audit-log] WITH (STATE = ON) --创建时启用 GO
上面创建了两个审核,Audit-logfile 和 Audit-log(审核目标位置不同),介绍了目标位置为不同方式的两种创建方法,实际运用中可选择其中一种即可。
审核规范可以是服务器级别的审核规范,也可以是数据库级别的审核规范,二者创建一种即可。
如果是服务器级别的审核规范,则审核规范对所有数据库都生效,如果是数据库级别的审核规范,则需要对每一个具体的数据库定义审核规范。
下面分别介绍两种审核规范的创建方式。
“服务器审核规范” 对象属于审核。 您可以为每个审核创建一个服务器审核规范,因为它们都是在 SQL Server 实例范围内创建的。
服务器审核规范可收集许多由扩展事件功能引发的服务器级操作组。 您可以在服务器审核规范中包括“审核操作组” 。 审核操作组是预定义的操作组,它们是 数据库引擎中发生的原子事件。 这些操作将发送到审核,审核将它们记录到目标中。
如为上一步创建的审核(Audit-logfile) 创建一个服务器审核规范,下面分别介绍两种方式:通过SSMS界面配置和通过SQL语句创建。
(1)通过SSMS界面创建服务器审核规范
右键“安全性”-“服务器审核规范”:
点击“新建服务器审核规范”:
如上图:名称自定义,如Server-audit,审核对象选择 Audit-logfile,审核操作类型可选择需要审计的类型:
部分审计类型含义如下:
(2)通过SQL语句创建,执行sql语句如下:
USE [master] GO CREATE SERVER AUDIT SPECIFICATION [Server-audit] FOR SERVER AUDIT [Audit-logfile] ADD (FAILED_LOGIN_GROUP), ADD (FAILED_DATABASE_AUTHENTICATION_GROUP), ADD (SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP), ADD (SUCCESSFUL_LOGIN_GROUP), ADD (SCHEMA_OBJECT_CHANGE_GROUP), ADD (SCHEMA_OBJECT_ACCESS_GROUP), ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP) WITH (STATE = ON) GO
执行成功后,会在左侧“安全性”-“服务器审核规范”下面生成一条配置,名为 Server-audit,如下图
“数据库审核规范” 对象也属于 SQL Server 审核。 针对每个审核,您可以为每个 SQL Server 数据库创建一个数据库审核规范。
数据库审核规范可收集由扩展事件功能引发的数据库级审核操作。 你可以向数据库审核规范添加审核操作组或审核事件。 审核事件 是可以由 SQL Server 引擎审核的原子操作。 “审核操作组”是预定义的操作组。 它们都位于 SQL Server 数据库作用域。 这些操作将发送到审核,审核将它们记录到目标中。
下面分别介绍两种方式:通过SSMS界面创建和通过执行SQL语句创建数据库审核规范,针对测试环境数据库mydb创建数据库审核规范。
(1)通过SSMS界面创建数据库审核规范
选择“数据库”-mydb-“安全性”-“数据库审核规范”,右键如下图:
点击“新建数据库审核规范”,如下图:
如上图:名称自定义,如Db-Audit,审核对象选择 Audit-logfile,审核操作类型可选择需要审计的事件操作类型等:
(2)通过执行SQL语句创建数据库审核规范
use [mydb] GO CREATE DATABASE AUDIT SPECIFICATION [Db-Audit] FOR SERVER AUDIT [Audit-logfile] ADD (DELETE,UPDATE,SELECT,INSERT ON DATABASE::[mydb] BY [public]) WITH (STATE = ON) GO
执行如下图:
执行成功后,会在左侧 “数据库”-mydb-“安全性”-“数据库审核规范” 下面生成一个名为 Db-Audit 的配置项。
数据库级别的审核规范,审计动作组部分含义如下:
数据库级别的审核规范,单个审计动作如下:
数据库级别的审计动作(Audit Action),分别在执行查询、修改、插入、删除、执行、等命令时触发
右键 “安全性”-“审核”-“Audit-logfile”, 选择 “查看审核日志”:
日志如下图所示:
通过SQL查询:
select * from sys.fn_get_audit_file('C:\dbaudit\*',default,default)
如下图:
到此这篇关于SQLServer审计功能配置的文章就介绍到这了,更多相关SQLServer审计功能配置内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!