今天被问到这样一个问题,SQL Server 2008的审核窗口中,好像每次只能设置针对一个对象(例如表,视图等),能不能对一批对象进行审核呢?
首先,稍微回顾一下审核功能
下面是我的回复:
==========================================================================
关于SQL 2008中针对多个对象进行审核的功能。如果通过那个图形化界面进行设置,确实每次只能设置一个对象,即便你选择了多个,也是只有第一个。
这个问题可以这么理解:微软并不推荐大量的表不分青红皂白地进行审核的,地球人都知道,审核会影响性能。所以,微软限制了每次设置审核的数目,借此提醒管理员思考到底是否真的要这么做。
但是,如果真的要对大量的对象进行审核,是否就一定没有办法了呢?答案是:不是
我给你写了一个脚本,演示了如何针对某个架构(Schema)进行审核,也就是说只要是属于该schema的,就都被包含在审核中。
Schema是SQL Server 2005开始增加的一个新的概念,在大型数据库中,会有大量Schema.
希望对你有帮助
--第一步:创建服务器审核
USE [master]
GO
CREATE SERVER AUDIT [Test]
TO FILE
( FILEPATH = N'E:\Temp\'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
,AUDIT_GUID = 'a511e0ac-50b5-4c75-9cd9-f2bbd06b269f'
)
GO
--将其启动
ALTER SERVER AUDIT [Test] WITH (STATE = ON)
--第二步:创建书库审核规范
USE Northwind
GO
--这里是针对架构进行审核,即所有dbo架构下面的对象(表,视图等等)都被审核
CREATE DATABASE AUDIT SPECIFICATION [demo]
FOR SERVER AUDIT [Test]
ADD (INSERT ON SCHEMA::[dbo] BY [dbo])
WITH (STATE = ON)
GO
--第三步:测试(下面分别针对两个表进行插入,但它们都属于dbo架构)
INSERT INTO Northwind..demo VALUES(1);
INSERT INTO Northwind..demo2 VALUES(1);
--第四步:清理测试
USE [Northwind]
GO
IF EXISTS (SELECT * FROM sys.database_audit_specifications WHERE name = N'demo')
BEGIN
ALTER DATABASE AUDIT SPECIFICATION [demo] WITH(STATE=OFF)
DROP DATABASE AUDIT SPECIFICATION [demo]
END
GO
DROP TABLE demo;
DROP TABLE demo2;
USE [master]
GO
IF EXISTS (SELECT * FROM sys.server_audits WHERE name = N'Test')
BEGIN
ALTER SERVER AUDIT [Test] WITH (STATE = OFF)
DROP SERVER AUDIT [Test]
END
GO
从这个例子也可以再一次说明这样一个问题:如果仅仅会使用图形化界面,那么其实很难做好SQL Server的管理或者开发。大家还是要多学习一些脚本的命令。