审计(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)。

使用向导来创建服务器级别的审计规范,从列表中选择审计对象,从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。

三,创建数据库级别的审计规范

在数据库的Security中右击“Database Audit Specifications”,数据库级别的审计操作组,大部分和服务器级别的审计操作组很相似,除了数据库级别的审计动作(Database-Level Audit Actions),在数据库对象上发生以下操作(Action)时,记录事件的信息:

  • SELECT
  • UPDATE
  • INSERT
  • DELETE
  • EXECUTE
  • REFERENCES

1,使用Wizard创建数据库审计规范

数据库级别的审计操作追踪和记录的是数据库对象(schema,objects)上发生的事件,因此必须配置Object Class、Object Schema,Object Name 和 Principal Name字段:

查看审计数据,选中Server级别的审计对象,通过”View Audit Logs“查看记录的日志数据。

2,使用TSQL命令创建数据库级别的审计规范

在审计规范中,如何设置Principal为public,表示对所有database principals进行审计。

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-20191118-091731]
FOR SERVER AUDIT [Audit-20191118-090843]
ADD (DELETE ON Schema::schema_name BY public)
WITH (STATE = ON) ;

四,查看审计数据

用户可以通过两种方式来查看审计数据,第一种是使用UI来查看,第二种是使用系统视图来查看。

1,使用UI查看审计数据

点击审计对象,右击弹出快捷菜单,点击”View Audit Logs“查看审计对象记录的数据:

2,通过TSQL 函数查看审计数据

查看审计数据通过sys.fn_get_audit_file()来查看:

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  f.event_time
,f.sequence_number
,f.action_id
,a.name as action_name
,f.succeeded
,f.session_server_principal_name
,f.server_principal_name
,f.database_name
,f.object_id
,f.schema_name
,f.object_name
,f.class_type
,m.class_type_desc
,f.statement
,f.application_name
from sys.fn_get_audit_file('G:\AuditFiles\*',default,default) f
inner join sys.dm_audit_actions a
on f.action_id=a.action_id
inner join sys.dm_audit_class_type_map m
on f.class_type=m.class_type

参考文档:

SQLSERVER2008新增的审核/审计功能

SQL Server Audit (Database Engine)

SQL Server Audit Action Groups and Actions

sys.fn_get_audit_file (Transact-SQL)

SQL Server 审计的更多相关文章

  1. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  2. SQL Server审计功能入门:更改跟踪(Change Tracking)

    原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...

  3. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  4. SQL Server 审计操作概念

    概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...

  5. SQL Server 审计(Audit)

    审计(Audit)用于追踪和记录SQL Server实例,或者单个数据库中发生的事件(Event),审计运作的机制是通过捕获事件(Event),把事件包含的信息写入到事件日志(Event Log)或审 ...

  6. SQL Server安全(2/11):身份验证(Authentication)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  7. 第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  8. 【译】第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  9. 第14周翻译:SQL Server的阶梯安全级别2

    SQL Server的阶梯安全级别2:身份验证 源自:http://www.sqlservercentral.com/articles/Stairway+Series/109975/ 作者:Don K ...

随机推荐

  1. 【NOIP】OpenJudge - 15-02:财务管理

    #include<stdio.h>//财务管理 int main() { ]={},sum=,ave=; ;i<=;i++) { scanf("%f",& ...

  2. 系统出现异常: too many values to unpack (expected 2)

    先感谢[ValueError: too many values to unpack](http://leonzhan.iteye.com/blog/1720315)系统出现异常:打开太多值(预期2)这 ...

  3. 【JAVA零基础入门系列】Day6 Java字符串

    字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...

  4. 给vue项目添加ESLint

    eslint配置方式有两种: 注释配置:使用js注释来直接嵌入ESLint配置信息到一个文件里 配置文件:使用一个js,JSON或者YAML文件来给整个目录和它的子目录指定配置信息.这些配置可以写在一 ...

  5. struts2中的结果视图类型

    实际上在Struts2框架中,一个完整的结果视图配置文件应该是: <action name="Action名称" class="Action类路径" me ...

  6. Jquery地图热点效果-鼠标经过弹出提示信息

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. zabbix使用mysql数据库 对表分区

    zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...

  8. JavaScript面向对象基础与this指向问题

      前  言           我们的程序语言经历了从"面向机器".到"面向过程".再到"面向对象"的一个过程.而JavaScript是一 ...

  9. C语言第一次实验报告————PTA实验1.2.3内容

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  10. 转:C++学习之Pair

    Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a; 表示a中有两个类型,第一个元素是int型的 ...