设为首页 收藏本站
查看: 1306|回复: 0

[经验分享] SQL Server 审核(Audit)-- 使用T-SQL创建审核,以审核数据库内的查询操作

[复制链接]

尚未签到

发表于 2018-10-17 08:25:25 | 显示全部楼层 |阅读模式
SQL Server 审核(Audit)-- 使用T-SQL创建审核,以审核数据库内的查询操作
任务1:创建审核
  步骤1打开SSMS,执行以下脚本。
--01 Create SQL Server Audit  
USE master
  
GO
  
CREATE SERVER AUDIT [Audit-AdventureWorks2012-SELECT]
  
TO FILE
  
( FILEPATH = N'D:\MSSQL\DATA\Audit_logs'
  
,MAXSIZE=10MB
  
,MAX_ROLLOVER_FILES=100
  
,RESERVE_DISK_SPACE=OFF)
  
WITH
  
( QUEUE_DELAY=1000,ON_FAILURE=CONTINUE)
  
GO
  
--02 Enable the Audit
  
ALTER SERVER AUDIT [Audit-AdventureWorks2012-SELECT]
  
WITH (STATE=ON)
  
GO
  
--03 Use sys.server_audits to check current status
  
SELECT name N'Audit', is_state_enabled N'Enabled',type_desc N'Audit Type',queue_delay N'Wait Time',create_date N'Create Time',modify_date N'Modify Time'
  
FROM sys.server_audits
  利用CREATE SERVER AUDIT语法,创建审核对象,说明如下。
  l 审核名称:Audit-AdventureWorks2012-SELECT。
  l 队列延迟:1000(秒)。
  l 审核目标:File。
  l 文件路径:D:\MSSQL\DATA\Audit_logs。
  l 最大滚动更新文件:100。
  l 最大文件大小:10MB。
  l 此服务器审核对象已经启用。
DSC0000.jpg

任务2:创建服务器审核规范对象
  步骤1打开SSMS,执行以下脚本。
--01 Create Server Audit Specification  
USE master
  
GO
  
CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-Login-Successful]
  
FOR SERVER AUDIT [Audit-AdventureWorks2012-SELECT]
  
ADD (SUCCESSFUL_LOGIN_GROUP)
  
GO
  
--02 Enable the Server Audit Specification
  
ALTER SERVER AUDIT SPECIFICATION [ServerAuditSpecification-Login-Successful]
  
WITH (STATE=ON)
  利用CREATE SERVER AUDIT SPECIFICATION语法,创建Server Audit Specification,具备以下的特性。
  l 服务器审核规范的名称:ServerAuditSpecification-Login-Successful。
  l 使用此审核规范的审核名称:Audit-AdventureWorks2012-SELECT。
  l 所要审核的操作组:SUCCESSFUL_LOGIN_GROUP。
  步骤2执行以下代码,查看服务器审核规范对象。
--01 Query Server Audit Specification  
SELECT name N'Server Audit Specification',is_state_enabled N'Enabled',
  
Create_date N'Create Time',modify_date N'Modify Time'
  
FROM sys.server_audit_specifications
  
--02 Query Server Audit Specification more information
  
SELECT audit_action_id N'Audit Action ID',audit_action_name N'Audit Action Or Audit Action Group',
  
Class_desc N'Object Class',is_group N'Action Group'
  
FROM sys.server_audit_specification_details
DSC0001.jpg

  步骤3执行以下代码,查看可用的审核操作、审核操作组的项目。
--Audit Action or Audit Action Group  
SELECT * FROM sys.dm_audit_actions
  
SELECT * FROM sys.dm_audit_actions WHERE action_id='LGSD'
  
--Audit class type
  
SELECT * FROM sys.dm_audit_class_type_map ORDER BY securable_class_desc
DSC0002.jpg

DSC0003.jpg

DSC0004.jpg

任务3:创建数据库审核规范对象
  步骤1打开SSMS,执行以下脚本
--01 Create Database Audit Specification  
USE AdventureWorks2012
  
GO
  
CREATE DATABASE AUDIT SPECIFICATION [AuditDatabaseSpecification-Object-SELECT]
  
FOR SERVER AUDIT [Audit-AdventureWorks2012-SELECT]
  
ADD (SELECT ON SCHEMA::[dbo] BY [public])
  
GO
  
/*
  
{
  
Action [ ,…n] ON [ class :: ] securable BY principal [ ,…n]
  
}
  
*/
  
--02 Enable Database Audit Specification
  
ALTER DATABASE AUDIT SPECIFICATION [AuditDatabaseSpecification-Object-SELECT]
  
WITH (STATE=ON)
  利用CREATE DATABASE AUDIT SPECIFICATION语法,创建数据库审核规范对象,具备以下的特性。
  l 数据库审核对象的名称:[AuditDatabaseSpecification-Object-SELECT]
  使用此审核规范的审核名称:[Audit-AdventureWorks2012-SELECT]
  l 所要审核的操作:SELECT。

  l>  l Securable使用dbo关键词,这表示包含dbo架构下的所有对象。可以依据审核的要求,填入适合的架构名称。
  l 在principal部分,使用public关键词,代表固定数据库级别角色public。因为每位数据库用户都属于public数据库角色,借此可以包含数据库的每一位用户账户。
  步骤2执行以下脚本,查看可用于设置数据库审核规范对象的相关信息。
SELECT * FROM sys.database_audit_specifications  
SELECT name N'Database Audit Specification',is_state_enabled N'Enabled',
  
Create_date N'Create Time',modify_date N'Modify Time'
  
FROM sys.database_audit_specifications
  
SELECT * FROM sys.database_audit_specification_details
  
SELECT audit_action_id N'Audit Action ID',audit_action_name N'Audit Action Or Audit Action Group',
  
Class_desc N'Class Desc',is_group N'Action Group'
  
FROM sys.database_audit_specification_details
DSC0005.jpg

DSC0006.jpg

任务4:测试审核功能 – 登录目标数据库,查询数据表
  步骤1打开SSMS,执行以下脚本,创建账户superpippo,登录到数据库AdventureWorks2012并赋予适当的权限。
USE master  
GO
  
CREATE LOGIN [superpippo]
  
WITH PASSWORD=N'Mpdfzh7',DEFAULT_DATABASE=AdventureWorks2012,
  
CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF
  
GO
  
USE AdventureWorks2012
  
GO
  
CREATE USER [superpippo]
  
FOR LOGIN [superpippo]
  
GO
  
EXEC sp_addrolemember N'db_datareader',N'superpippo'
  步骤2利用登录账户superpippo登录SQL Server,执行以下代码。
USE AdventureWorks2012  
GO
  
SELECT * FROM dbo.DatabaseLog
  
SELECT * FROM dbo.ErrorLog
  
SELECT * FROM Person.Password
任务5使用日志文件查看器阅读审核日志
  步骤1展开“Object Explorer”,“Security”,“Audits”节点。
  步骤2在“Audits”节点“Audit-AdventureWorks2012-SELECT”对象上右击,选择“View Audit Logs”选项。
  步骤3在“Log File Viewer”左上角的“Select logs”区域,确认有勾选“Audit Collection”,“Audit-AdventureWorks2012-SELECT”,利用以下的方式来阅读所记录的审核信息。
DSC0007.jpg


  需要将“Action>任务6:创建T-SQL函数进一步分析审核的日志
  步骤1执行以下代码。
--Create Function ufn_AuditReport  
USE master
  
GO
  
IF EXISTS(SELECT * FROM sys.objects WHERE object_id=OBJECT_ID(N'[dbo].[ufn_AuditReport]') AND type in(N'FN',N'IF',N'TF',N'FS',N'FT'))
  
DROP FUNCTION [dbo].[ufn_AuditReport]
  
GO
  
CREATE FUNCTION dbo.ufn_AuditReport
  
(@filepath varchar(1000))
  
RETURNS @retAuditReport TABLE
  
(
  
[session_id] int NULL,
  
[server_principal_name] sysname NOT NULL,
  
[ip] nvarchar(100) NULL,
  
[login_time] datetimeoffset(7) NULL,
  
[database_name] sysname NOT NULL,
  
[action_time] datetimeoffset(7) NULL,
  
[tsql] nvarchar(4000) NULL
  
)
  
AS
  
BEGIN
  
DECLARE @tsl TABLE
  
(RN int, session_id int, event_time datetime2, server_principal_name sysname,
  
Server_principal_id int, database_name sysname, statement nvarchar(4000))
  
DECLARE @tlgls TABLE
  
(RN int IDENTITY(1,1), event_time datetime2, additional_information nvarchar(4000))
  
INSERT @tsl
  
SELECT ROW_NUMBER() OVER(ORDER BY event_time) 'RN',
  
Session_id,event_time,server_principal_name,server_principal_id,database_name,statement
  
FROM sys.fn_get_audit_file(@filepath,default,default)
  
WHERE action_id IN('SL')
  
DECLARE @rid INT=1
  
DECLARE @tslRN INT=(SELECT MAX(RN) FROM @tsl)
  
WHILE @tslRN>=@rid
  
BEGIN
  
DECLARE @session_id int=(SELECT session_id FROM @tsl WHERE RN=@rid)
  
DECLARE @event_time datetime2=(SELECT event_time FROM @tsl WHERE RN=@rid)
  
DECLARE @server_principal_id int=(SELECT server_principal_id FROM @tsl WHERE RN=@rid)
  
INSERT @tlgls(event_time,additional_information)
  
SELECT TOP (1) event_time,additional_information
  
FROM sys.fn_get_audit_file(@filepath,default,default)
  
WHERE action_id='LGIS' AND session_id=@session_id AND server_principal_id=@server_principal_id AND event_time

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622545-1-1.html 上篇帖子: SQL SERVER2000教程-第五章 处理数据 第二十二节 利用UNION对多条SQL查询语句合并生成表 下篇帖子: sql注入——避开过滤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表