在SQL Server 2008中提出了一套新的管理机制,就是所谓的基于策略的管理(姑且可以称为PBM)。它的主要优势如下
简单地说,基于策略管理的两个方面是:评估和监视。
基于策略管理的术语
为策略检查配置警报
如果某项策略被违反,SQL Server 2008会生成相应的警报,因此可以通过在SQL Agent中配置警报来监控这些事件
执行模式 |
事件号 |
On Change - Prevent (if automatic) |
34050 |
On Change - Prevent (if On Demand) |
34051 |
On schedule |
34052 |
On change |
34053 |
属于PolicyAdministratorRole的成员才可以制定和修改策略定义,这个角色的成员是必须要小心控制的,因为恶意用户可以通过制定苛刻的策略来达到类似于拒绝服务攻击的效果。
【备注】这个角色是在MSDB里面
我们下面用一个例子来演示一下如何使用策略进行管理工作。
我们的需求是:管理员需要确保服务器上所有数据库中的存储过程都是加密过的。
1. 创建条件(Condition)。
点击“新建条件”
输入名称,在“方面”里面选择“存储过程”
在表达式中,“字段”中选择“@IsEncrypted”,“值”设置为True(默认为True)
作为演示,其他的内容我们就不设置了。直接点击“确定”关闭“创建新条件”对话框。我们可以在对象资源管理器中看到新增加的一个条件。如下图所示
2. 创建一个策略(Policy)
接下来,我们基于这个条件创建文明的策略。
点击“新建策略”
输入一个名称,并且在“检查条件”中选择刚才创建号的“存储过程是否加密”这个条件。默认情况下,会有另外一些设置。如下图
作为演示的第一个步骤,我们先不对其他选项做任何设置。直接点击“确定”退出该对话框
3. 启用该策略
策略创建好之后,默认是没有启用的。我们必须通过菜单进行启用
很不幸,我们点击“启用”之后,会收到下面的一个错误消息
这个消息提示说:按需模式不支持“启用”。也就是说,如果按需评估,则不需要启用。
其实,按需的意思就是手工评估。
4. 使用该策略对数据库进行按需评估
现在我们有了这么一个策略,我们怎么样验证某个数据库中的存储过程是否满足该策略的要求呢?
选择刚才创建好的策略,然后右键菜单中点击“评估”
这个工具就会检测当前服务器上面所有数据库中的所有存储过程是否已加密。在上面的对话框中,还可以点击“导出结果”得到一个xml文件,可以作为其他用途,例如编写专门的报告
与此同时,我们还可以直接针对某个特定的存储过程进行评估
选中策略后,点击“评估”
评估的结果仍然是没有通过,因为我们的存储过程没有加密。
5. 使用策略进行主动监控。
与评估不同,监控则有主动性。例如,如果我们在服务器上启用了该策略,那么任何存储过程在被增加或者修改的时候,我们就可以主动干预,确保它必须加密。
我们再来看一下评估模式
这四种模式中,其实分为两大类
“按需”和“按计划”这两种很类似,都是作为评估用的。他们的评估结果大多数通过“查看历史记录”的方式进行查看的。他们的区别只是在于“按计划”是一个排好的日程,定期自动做的,而“按需”是全靠手工地做
而“更改时:仅记录”和“更改时:禁止”则带有主动性。
两者的区别在于前者仅仅做记录,而后者可以明确地阻止用户的操作。
6. 使用“更改时:禁止”这种评估模式进行工作。
我们要实现的需求就是,如果用户新建存储过程,不进行加密,就不允许保存。
我们首先将策略的评估模式更改为“更改时:禁止”,并且选中“已启用”的复选框。然后点击“确定”关闭该对话框
接下来,我们尝试去创建一个很简单的存储过程
这个语句太平常不过了。也没有任何问题。然后我们点击F5,执行代码
我们收到了这么一个消息,说是因为不匹配策略,所以被回滚了。有点神奇对吧
那么,我们怎么样才能成功创建该存储过程呢?我们需要做的是,修改存储过程的代码,指定为其加密
这样的话,该存储过程就可以被创建了。如下
需要注意观察一下它的图标,右下角带有一个小锁,这就表示该存储过程被加密了。加密的意思是不允许查看源代码。(不管你用哪种方式)
7. 关于策略的其他好处
上面我们完整地演示了如何使用策略进行评估或者监视的过程。那么,是不是说每一台服务器都需要我们这样一步一步地创建条件,创建策略呢?
显然不是的,基于策略的管理机制的好处就在于策略本身可以复用,实现一次定义,多次使用。
第一步,我们可以把策略导出
导出的是一个XML文件。里面包含了有关条件和策略的定义
为了做测验,我把刚才创建好的条件和策略都删除掉。下面来看看,如果通过导入策略的方式来部署。
点击“确定”之后,我们很高兴地看到条件和策略都被重新创建了
我们选中“存储过程必须经过加密”这个策略,右键菜单中选择“评估”,它可以正常工作,这证明我们导入是成功的。