SQL Server 审核(Audit)-- 审核对数据库对象的访问

SQL Server 审核(Audit)-- 审核对数据库对象的访问

任务1:创建登录账户,授予适当的权限


步骤1打开SSMS,输入如下语句,创建登录账户UltraSQL,授予访问AdventureWorks2012数据库的Person.Person和Person.Password权限。

USE master
GO
--Create Login UltraSQL
CREATE LOGIN UltraSQL
WITH PASSWORD=N’Mpdfzh7’,
DEFAULT_DATABASE=AdventureWorks2012, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
--Create User UltraSQL In AdventureWorks2012
USE AdventureWorks2012
GO
CREATE USER UltraSQL FOR LOGIN UltraSQL
GO
--Grant Select Privilege to Person.Person & Person.Password
GRANT SELECT ON Person.Person TO UltraSQL
GRANT SELECT ON Person.Password TO UltraSQL
GO

任务2:创建审核


步骤1打开SSMS,登录到指定的实例,展开“Security”,“Audits”节点。

步骤2在“Audits”节点上,右键选择“New Audit…”选项。

步骤3在“Create Audit”窗口,输入以下的参数。

l 在“Audit name”输入Audit-AdventureWorks2012-AccessTable。

l 在“Audit destination”选择“File”

l 在“File path”输入D:\MSSQL\DATA\Audit_logs。

l 取消勾选位于“Maximum rollover files”框下的“Unlimited”。

l 在“Number of files”输入100。

l 取消勾选位于“Maximum file size”框下的“Unlimited”。

l 在“Maximum file size”输入10,选择“MB”框。

设置“Maximum file size”为10MB,可以让每个审核文件的大小,维持在指定的大小之内,当此审核文件的空间耗用完之后,将参照“Maximum rollover files”选项的设置,依据默认值,最多可保留的审核文件数据量,可达2147483647个文件。这里,每个审核文件最大可达10MB,最多可保留的文件数量是100个。

步骤4单击“OK”完成设置。

步骤5右键点击刚刚创建的审核“Audit-AdventureWorks2012-AccessTable”,选择“Enable Audit”选项。

任务3:创建访问数据表的审核


步骤1展开“Database”,“AdventureWorks2012”,“Security”,“Database Audit Specifications”节点。

步骤2在“Database Audit Specifications”节点,单击鼠标右键选择“New Database Audit Specification…”选项。

步骤3在“Create Database Audit Specification”窗口输入以下的参数。

l 在“Name”输入DatabaseAuditSpecification-UltraSQLAccessPerson.Password。

l 在“Audit”下拉框选择之前创建的审核对象Audit-AdventureWorks2012-AccessTable。

l 在“Audit Action Type”中选择“SELECT”。

l 在“Object Class”中选择“OBJECT”选项。

l 在“Object Name”中单击图表,选择“Person.Password”选项。

l 在“Principal Name”中单击图表,选择“UltraSQL”选项。

步骤4参照步骤3,在“Action”区域的第二行部分,添加对“Audit Action Type”是“UPDATE”的监视。。以针对用户UltraSQL查询或是更新数据表Person.Password进行审核。

步骤5右键点击刚刚创建的数据库审核规范“DatabaseAuditSpecification-UltraSQLAccessPerson.Password”,选择“Enable Database Audit Specification”选项。

任务4:测试审核功能


步骤1:以UltraSQL的身份,通过SSMS连接到AdventureWorks2012。

步骤2使用UltraSQL账号,对数据表Person.Password执行查询与更新等操作。

USE AdventureWorks2012
GO
SELECT * FROM Person.Password
SELECT * FROM Person.Person
SELECT * FROM Person.Password
UPDATE Person.Password SET ModifiedDate=GETDATE() WHERE BusinessEntityID=1
/*
Msg 229, Level 14, State 5, Line 1
The UPDATE permission was denied on the object ‘Password‘, database ‘AdventureWorks2012‘, schema ‘Person‘.
*/
SELECT * FROM Person.Password WHERE BusinessEntityID=1
SELECT a.PasswordHash,b.FirstName,b.LastName
FROM Person.Password a INNER JOIN Person.Person b
ON a.BusinessEntityID = b.BusinessEntityID
SELECT TOP 1 * FROM Person.Password WHERE BusinessEntityID=1

任务5:使用“Log File Viewer”,阅读审核日志


步骤1以sysadmin身份登录实例,展开“Object Explorer”,“Security”,“Audits”节点。

步骤2在审核“Audit-AdventureWorks2012-AccessTable”上单击右键,选择“View Audit Logs”。

步骤3在“Log File Viewer”窗口的左侧,选择“Audit Collection”,“Audit-AdventureWorks2012-AccessTable”,并利用以下的方式来阅读所记录的审核信息。

l 在右边的“Log file summary”区域内,在“Action ID”框下,单击“SELECT”操作类型的数据行日志。

l 在下方的“Database Principal Name”区域,可以看到所记录的数据库用户。在“Statement”区域可以看到所记录的程序代码。

有个特别的现象,整理如下。

l 以执行UPDATE语句为例,将会引发SELECT与UPDATE等两个“Action ID”行为,也将会产生两笔审核日志,所记录下来的数据除了在“Action ID”区域是不同的之外(一个是SELECT,一个是UPDATE),其余部分都一样。此外,即便是用户UltraSQL没有权限可以修改数据表,这些行为也将被审核对象所记录,但在“Succeeded”区域部分日志为False。

任务6:使用T-SQL函数来分析、筛选审核的日志数据


步骤1利用sysadmin身份,执行SSMS,输入如下查询语句,使用sys.dm_server_audit_status动态管理视图来查看各个审核对象的当前状态。

USE master
GO
SELECT audit_id N‘Audit ID‘, name N‘Audit Name‘, status_desc N‘Server Audit Status‘,
Status_time N‘Last Status Changed Timestamp‘, audit_file_size N‘Audit File Size‘,
Audit_file_path N‘Audit File Full Path‘
FROM sys.dm_server_audit_status;

l 数据行status_desc(服务器审核状态):查看各个审核对象是否已经启用。

l 数据行audit_file_size(审核文件大小(KB)):查看以二进制文件为目标的审核文件,其所使用的空间,以KB为单位;若非二进制文件,例如:以“Windows应用程序事件日志文件”来存放的审核日志,则会显示NULL。

l 数据行audit_file_path(审核文件目标的完整路径名称):查看以二进制文件为目标的审核文件,其所在的完整路径与文件名。

步骤2单击“New Query”,执行如下代码,使用函数fn_get_audit_file分析审核文件

--EX1 Query the Audit File
/*
Fn_get_audit_file (Transact-SQL)
fn_get_audit_file(file_pattern, {default | initial_file_name | NULL },{default | audit_file_offset | NULL})
Param:file_pattern
Set the Audit File Full Path.
*/
SELECT * FROM sys.fn_get_audit_file(N’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_AF3AAECB-30CC-4476-9395-8754E60E356C_0_130639659785910000.sqlaudit’,default,default);
--EX2 Using * Query some Audit Files created by the same audit object
SELECT * FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default);
--EX3 attention: event_time type is datetime2,stored GMT
SELECT event_time N’Audit caused Date & Time(GMT)’, server_principal_name N’Login’,
Database_principal_name N’User’, database_name N’Database’, object_name N’Object Name’, statement N’TSQL’
FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default);
--EX4 Convert to Timezone Bejing(GMT+08:00) using data type datetimeoffset & Function SWITCHOFFSET)
SELECT SWITCHOFFSET(CAST(event_time AS datetimeoffset),’+08:00’) N’Audit Action caused date & time(Timezone Bejing GMT+08:00)’,
Server_principal_name N’Login’, database_principal_name N’User’,
Database_name N’Database’, object_name N’Object Name’, statement N’TSQL’
FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default);
--EX5 Import all audit files in the directory into system
SELECT *
FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\*’,default,default);
--EX6 Convert to Timezone Bejing(GMT+08:00) using data type datetimeoffset & Function SWITCHOFFSET)
SELECT SWITCHOFFSET(CAST(event_time AS datetimeoffset),’+08:00’) N’Audit Action caused date & time(Timezone Bejing GMT+08:00)’,
Server_principal_name N’Login’, database_principal_name N’User’,
Database_name N’Database’, object_name N’Object Name’, statement N’TSQL’
FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\*’,default,default);

说明:

l 在EX1部分中函数fn_get_audit_file的第一个变量,更换为执行sys.dm_server_audit_status后,取得字段audit_file_path的值部分,或是填入完整的审核文件的文件名。在第二个和第三个变量,填入default,采取默认值即可。

l 若要将同一个审核对象所产生的多个审核文件,都加载到系统内进行分析,可以在文件名上,搭配使用通配符*,参考EX2代码。

l 审核所记录的日期时间是格林威治时间(GMT),数据类型为datatime2,可以转换成数据类型datetimeoffset,并利用函数SWITCHOFFSET,将此数据改以北京时区(GMT+08:00)的格式来显示,参考EX3和EX4。

l 若需要将指定文件夹内的各个审核文件,都加载到系统内进行分析,可以搭配通配符*,参考EX5和EX6。

任务7:审核文件的归档存放


步骤1在D:\MSSQL\DATA\Audit_logs内创建新的文件夹Archive_Audit。

步骤2打开文件夹D:\MSSQL\DATA\Audit_logs,复制此文件夹内的审核文件(*.sqlaudit)到文件夹D:\MSSQL\DATA\Audit_logs内,此为简易备份审核文件的方式。

步骤3若要删除已经备份过的审核文件,请先确认此审核对象已经禁用。否则,正在使用的审核文件将将无法删除。

时间: 2024-11-05 16:12:29

SQL Server 审核(Audit)-- 审核对数据库对象的访问的相关文章

SQL SERVER性能分析--死锁检测数据库阻塞语句

工作中数据库经常出现内存,找了篇文章 参照CSDN,中国风(Roy)一篇死锁文章 阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题. 整理人:中国风(Roy) 参照Roy_88的博客 http://blog.csdn.net/roy_88/archive/2008/07/21/2682044.aspx 日期:2008.07.20 ************************************************************************

如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PowerDesigner中

如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PowerDesigner中 Oracle的反向工程就是指将Oracle中的数据库,当然也可以是SQL Server中的数据库导入到PD中,这个需要建立一个数据库的链接,然后进行逆向工程的操作. 第一步:建立数据库的链接: PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中.[Oracle 10G版] PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中.

(转)SQL Server 2005附加2008的数据库

1. 生成for 2005版本的数据库脚本  2008 的manger studio  -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例  -- 右键要转到2005的库  -- 任务  -- 生成脚本  -- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2005的库  -- 勾选"为所选数据库中的所有对象编写脚本"5-- 在接下来的"选择脚本选项"中, 将”编写创建数据库的脚本”设

sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包

Sql Server中判断表或者数据库是否存在

Sql Server中判断表或者数据库是否存在 SQL Server中判断数据库是否存在: 法(一): select * From master.dbo.sysdatabases where name='数据库名' 法(二): if db_id('数据库名') is not null drop database ... go create ... SQL Server中判断表对象是否存在: select count(*) from sysobjects where id = object_id(

sql server 本地复制订阅 实现数据库服务器 读写分离

原文:sql server 本地复制订阅 实现数据库服务器 读写分离 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包括分发数据库,并且存储元数据.历史

SQL Server不停机移动镜像数据库

SQL Server数据库镜像是对于数据库可用性的软件解决方案.镜像在每个数据库级别被部署,并只能在完整恢复模式下工作.由于磁盘空间的问题,需要移动镜像数据库到一个不同的位置.我们想不停机.不破坏镜像来完成这个任务.需要在不同的环境做测试. 对于启用了数据库镜像的数据库的文件移动,我们只有有限的选择.常规方法如下: 破坏数据库镜像会话,通过使用Alter database或Attach Detach移动在线数据库文件到一个新的位置. 备份数据库,并在镜像服务器上恢复备份,然后重建镜像. 技术上来

sql server 2008 R2 压缩备份数据库

今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定,根本不可能通过网络传输过来. 于是,把数据库的恢复模式由"完整"模式设置为"简单"模式,接着收缩数据库, 数据库瞬间由20G变成1G多点. 在SSMS中,新建查询窗口,执行数据库备份语句: --定义变量,把备份数据库的QL脚本赋值给变量 declare @SqlBack

sql server 复制表从一个数据库到另一个数据库

sql server 复制表从一个数据库到另一个数据库 /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 f