一、概述

在上一篇文章中已经介绍了审计的概念;本篇文章主要介绍如何创建审计,以及该收集哪些审核规范。

二、常用的审核对象

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
CREATE SERVER AUDIT SPECIFICATION AuditSpecification_All
FOR SERVER AUDIT AuditServer_All
ADD (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'', 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 DATABASE Audit;
GO
----创建数据库审核规范,命名规范:AuditSpecification_描述(和审核描述保持一致)
USE [Audit]
GO
CREATE DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER 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) AS a --服务器审核相关视图
SELECT * FROM SYS.server_audits
SELECT * FROM sys.server_audit_specifications
SELECT * FROM sys.server_audit_specification_details SELECT sa.name as AuditName,
sa.type_desc AS StoreType,
sas.name AS AuditSpecificationsName,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_desc as AuditGrade
FROM SYS.server_audits sa INNER JOIN sys.server_audit_specifications sas ON sa.audit_guid=sas.audit_guid
INNER JOIN sys.server_audit_specification_details sasd ON sas.server_specification_id=sasd.server_specification_id
LEFT JOIN sys.dm_audit_actions daa ON sasd.audit_action_id=daa.action_id AND sasd.class_desc=daa.class_desc --数据库审核规范视图
SELECT * FROM chenmh.sys.database_audit_specifications
SELECT * FROM chenmh.sys.database_audit_specification_details SELECT sa.name as AuditName,
sa.type_desc AS StoreType,
sas.name AS AuditSpecificationsName,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_desc as AuditGrade
FROM SYS.server_audits sa INNER JOIN chenmh.sys.database_audit_specifications sas ON sa.audit_guid=sas.audit_guid
INNER JOIN chenmh.sys.database_audit_specification_details sasd ON sas.database_specification_id=sasd.database_specification_id
LEFT 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
DROP SERVER AUDIT SPECIFICATION AuditSpecification_All
GO --删除服务器审核对象,先禁用才能删除
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 DATABASE Audit;
GO
----创建数据库审核规范,命名规范:AuditSpecification_描述(和审核描述保持一致)
USE [audit]
GO
CREATE DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER 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
CREATE SERVER AUDIT SPECIFICATION AuditSpecification_All
FOR SERVER AUDIT AuditServer_All
ADD (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 DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER AUDIT AuditDatabase_Audit_AllObjectChange
WITH (STATE =ON)
GO
----启用数据库审核规范
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=ON);

八、总结

审核是数据库规范的一部分,在安全审计方面也非常的重要,建议生产系统都必须创建审核。

参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-functions/sys-fn-get-audit-file-transact-sql

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

SQL Server 创建服务器和数据库级别审计的更多相关文章

  1. SQLServer 创建服务器和数据库级别审计

    概述 在上一篇文章中已经介绍了审计的概念:本篇文章主要介绍如何创建审计,以及该收集哪些审核规范. 一.常用的审核对象 1.1.服务器审核对象 1.FAILED_LOGIN_GROUP( Audit L ...

  2. SQL Server跨服务器操作数据库

    今天给大家来分享一下跨服务器操作数据库,还是以SQL Server的管理工具(SSMS)为平台进行操作. 什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库 ...

  3. SQL Server不同服务器不同数据库间的操作

    什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库上进行相关的数据库操作,比如增删改查. 为什么要进行跨服务器操作 随着数据量的增多,业务量的扩张,需要在不 ...

  4. SQL Server跨服务器的数据库迁移

    1. 使用sql server task中back up 任务,保存为*.bak 文件. 2. 在另一个server中restore database,如果已经存在这个database,会覆盖之前的数 ...

  5. SQL Server 跨服务器 不同数据库之间复制表的数据

    不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库 ...

  6. SQL Server 创建数据库邮件

    一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. 二. 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyicati ...

  7. [转]SQL Server 创建数据库邮件

    本文转自:http://www.cnblogs.com/gaizai/p/3358958.html 一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. ...

  8. SQL Server 创建数据库快照

    创建数据库快照: 必须在create database 命令中包括源数据库的每一个数据文件,原始逻辑名,新物理名与路径, 不能指定其他属性 create database db_snapshot_na ...

  9. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

随机推荐

  1. UltraEdit注册机 及使用方法详解

    转载自:http://www.iyaxi.com/ultraedit-key/ UltraEdit是一款强大的文字编辑器,很多编程的.搞设计的等等都能用到它,具体功能请自行百度.今天为大家带来UE软件 ...

  2. 关于mvc中传递匿名对象,view中无法解析

    最近做项目用到MVC,发现用linq查询得到的数据是匿名类型对象,通过模型绑定.或者ViewBag.ViewData进行数据传递后,View解析报错:“object 未包含xx的定义”: 没找到好的解 ...

  3. STM32的定时器定时时间计算(计数时间和中断定时时间)

    时基单元 可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器.这个计数器可以向上计数.向下计数或者向上向下双向计数.此计数器时钟由预分频器分频得到. 计数器.自动装载寄存器和预 ...

  4. Convolutional Neural Network in TensorFlow

    翻译自Build a Convolutional Neural Network using Estimators TensorFlow的layer模块提供了一个轻松构建神经网络的高端API,它提供了创 ...

  5. python序列化与反序列

    python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...

  6. 杂记:Python 两坑

    近日写代码又遇到两个 Python 的坑,觉得值得记录. 递归传参问题 Python 里传参的实现是 assignment,但由于 Python 里都是对象,除了几个基本类型,assignment 基 ...

  7. GCJ-02火星坐标系和WGS-84坐标系转换关系

    GCJ-02火星坐标系和WGS-84坐标系转换关系 WGS-84:GPS坐标系 GCJ-02:火星坐标系,国测局02年发布的坐标体系,高德,腾讯等使用. BD-09:百度坐标系,百度自研,百度地图使用 ...

  8. eclipse的常用设置

    参考文档:https://www.cnblogs.com/maoniu602/p/3585049.html 版本和jdk的版本搭配问题 eclipse和JDK版本应搭配,而且,若使用32位则都使用32 ...

  9. afx.h(78): fatal error C1083: 无法打开包括文件: “new.h”: No such file or directory

    vs2015新建mfc工程,编译错误: D:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afx.h(78): ...

  10. Win Server 2003 10条小技巧

    微软推出Windows Server 2003已经有一段时间了,但是,由于它是一个面向企业用户的服务器操作系统,所以,没有引起更多个人用户的注意.实际上,简单地改变一下系统的设置,您也可以将Windo ...