审计(audit)用于追踪和记录sql server实例或数据库中发生的事件,审计主要包括审计对象(audit)和审计规范(audit specification),创建审计首先需要创建一个sql server 实例级的审计对象,然后,创建从属于它的“服务器审计规范”或“数据库审计规范”。审计数据可以输出到审计文件(file)、安全日志(security log)和应用程序日志(application log)。
启用审计的目的一般是为了监控sql server执行的操作,例如,记录什么人在什么时候查询数据、修改数据,登陆sql server实例等,由于审计记录的数据有可能很丰富,因此,启用审计可能产生大量的日志数据,占用磁盘的大量空间。审计使用一句话来概括就是:记录谁在什么时候做了什么事,审计对象(audit)定义:配置数据存在何处,而审计规范(audit specification)定义:记录什么事,一旦特定的事件触发,sql server引擎就使用审计记录事件发生的现场信息。
【数据库安全审计的意义】
随着社会信息化程度愈来愈高,线上业务数据也与日俱增。业务数据上线带来了长久稳定的存储模式、快速高效的企业数据分析等诸多好处,但同时也使得集中化数据暴露在恶意攻击、黑客渗透、内部泄密等风险之中。近几年频频发生企业数据丢失造成重大损失以及各类数据窃密的刑事案件,均是数据安全问题的真实写照,因此数据库安全审计显得尤为重要。
【创建和使用审计的一般步骤】
step1:创建服务器级别的审计对象,并启用审计对象;
step2:创建审计规范,并映射到审计对象审核,启用审计规范,审计对象开始追踪和记录数据;
step3:查看审计数据,可以通过使用ssms的”log files viewer“或函数sys.fn_get_audit_file 查看记录的日志数据。
一,创建审计对象
首先创建服务器级别的审计对象,展开"security",右击audits,通过“new audit”,打开“create audit”窗体开始创建审计对象,审计输出的数据保存到“audit destination”中,本文选择file,把数据存储到审计文件中,其他类型是:security log和application log。queue delay是指数据写入到审计文件的延迟,默认是1s。审计对象的作用是指定审计数据保存的路径,以及写入数据的延迟和数据文件的大小,审计对象主要是存储审计规范的数据。
根据硬盘空间的限制,设置审计对象的属性 audit file maximum limit、maximum file size、以及reserve disk space,控制审计文件的大小,管理硬盘空间的使用,避免硬盘爆掉。
创建的审计对象默认是禁用(disable)的,在使用审计对象之前,必须启用,选中新建的审计对象,右击,选中“enable audit”。
二,创建服务器级别的审计规范
展开security,选中“server audit specifications”,右击弹出快捷菜单,选择“new server audit specifications”,打开“create server audit specifications”的窗体,通过ui创建审计规范:
审计规范指定审计对象记录的事件类型,在审计规范中指定的事件类型,sql server 一旦检测到事件发生,就会把跟该事件相关的信息写入到审计对象指定的文件中,保存起来,以便于后续的检查(review)。
1,添加审计操作组
创建审计规范,选择审计对象,从audit action type列表中选择审计操作组,创建的审计规范默认是禁用的,选中新建的审计规范,右击弹出快捷菜单,选中”enable server audit specifications “启用:
从审核操作类型列表中选择审计操作组,审计操作组是审计记录的事件操作类型,常用的审计操作组是:
database_object_access_group:访问数据库对象时将引发此事件;
database_object_change_group:针对数据库对象(如架构)执行 create、alter 或 drop 语句时将引发此事件。 创建、更改或删除任何数据库对象时均将引发此事件。
database_operation_group:数据库中发生操作(如检查点或订阅查询通知)时将引发此事件。 对于任何数据库的任何操作都将引发此事件。
failed_database_authentication_group:指示某个主体尝试登录到数据库并且失败。
failed_login_group:指示主体尝试登录到 sql server ,但是失败。
successful_login_group:指示主体已成功登录到 sql server。
2,查看审计数据
点击审计对象,右击弹出快捷菜单,点击”view audit logs“查看审计对象记录的数据:
或者通过tsql 函数查看审计数据,
sys.fn_get_audit_file ( file_pattern,
{default | initial_file_name | null},
{default | audit_record_offset | null } )
审计文件名由四部分组成:auditname_guid_n_m.sqlaudit,第一个参数是file_pattern,包括路径和文件名,对于文件名,可以通过特殊的匹配符指定:
*:表示所有的字符;
{}:指定guid;
如果文件名以扩展名( .sqlaudit)结尾,表示查看特定的文件;
例如,查看所有的审计文件的数据:
select *from sys.fn_get_audit_file('e:\auditfiles\*',default,default)
三,创建数据库级别的审计规范
在数据库的security中右击“database audit specifications”,数据库级别的审计操作组,大部分和服务器级别的审计操作组很相似,除了数据库级别的审计动作(database-level audit actions),在数据库对象上发生以下操作(action)时,记录事件的信息:
select
update
insert
delete
execute
references
数据库级别的审计操作追踪和记录的是数据库对象(schema,objects)上发生的事件,因此必须配置object class、object schema,object name 和 principal name字段:
查看审计数据,选中server级别的审计对象,通过”view audit logs“查看记录的日志数据。
四,维护审计
创建审计很简单,dba需要更多关注的是审计数据的维护,目前开源的数据库安全审计系统质量良莠不齐,为了数据库安全建议大家还是使用正规、专业的数据库安全审计产品,比如安华金和之类的数据库安全服务商。
试用申请