使用基于策略的管理来管理服务器

基于策略的管理是一种用于管理一个或多个 SQL Server 2008 实例的系统。当 SQL Server 策略管理员使用基于策略的管理时,他们使用 SQL Server Management Studio 创建策略以管理服务器上的实体,例如,SQL Server 实例、数据库或其他 SQL Server 对象。

基于策略的管理包含以下三个组件:

  • 策略管理

    策略管理员创建策略。

  • 显式管理

    管理员选择一个或多个管理目标,并显式地检查这些目标是否符合特定策略,或者显式地使这些目标符合策略。

  • 评估模式

    共有四种评估模式,其中的三种模式可以自动执行:

    • 按需。当用户直接指定这种模式时,它可对策略进行评估。

    • 更改时: 禁止。这种自动模式使用 DDL 触发器来防止违反策略。

      重要说明重要提示

      如果禁用了 nested triggers 服务器配置选项,“更改时: 禁止”将不会正常工作。基于策略的管理依靠 DDL 触发器来检测和回滚不符合使用此评估模式的策略的 DDL 操作。删除基于策略的管理 DDL 触发器或禁用嵌套触发器将导致此评估模式失败或意外执行。

    • 更改时: 仅记录。当做出相关更改时,这种自动模式使用事件通知对策略进行评估。

    • 按计划。这种自动模式使用 SQL Server 代理作业定期对策略进行评估。

    在未启用自动策略时,基于策略的管理不会影响系统性能。

    注意注意

    在系统计算某一策略的对象集时,默认情况下将不包括系统对象。例如,如果策略的对象集涉及所有表,则该策略将不应用于系统表。如果用户想要对系统对象评估一项策略,则可以将系统对象显式添加到对象集中。尽管 check on schedule 评估模式支持所有策略,但出于性能原因,check on change 评估模式并不是支持具有任意对象集的所有策略。有关详细信息,请参阅 https://blogs.msdn.com/b/sqlpbm/archive/2009/04/13/policy-evaluation-modes.aspx

基于策略的管理术语和概念

  • 基于策略的管理目标
    基于策略的管理所管理的实体,例如,SQL Server 数据库引擎实例、数据库、表或索引。服务器实例中的所有目标构成了目标层次结构。目标集是将一组目标筛选器应用于目标层次结构后得到的一组目标,例如,HumanResources 架构所拥有的数据库中的所有表。

  • 基于策略的管理方面
    一组逻辑属性,用于模拟某些类型的管理目标的行为或特征。这些属性的数量和特征内置在方面中,只能由方面创建者添加或删除这些内容。一种目标类型可以实现一个或多个管理方面,而一个管理方面可以由一种或多种目标类型进行实现。方面的某些属性仅适用于特定版本。例如,外围应用配置器方面的数据库邮件属性仅适用于 SQL Server 2005 及更高版本。

  • 基于策略的管理条件
    一个布尔表达式,用于针对管理方面指定基于策略的管理托管目标的一组允许状态。

  • 基于策略的管理策略
    基于策略的管理条件和预期行为,例如,评估模式、目标筛选器以及计划。每个策略只能包含一个条件。您可以启用或禁用策略。

  • 基于策略的管理策略类别
    用于帮助管理策略的用户定义类别。用户可以将策略划分到不同的策略类别。每个策略属于一个策略类别,且仅属于一个策略类别。策略类别应用于数据库和服务器。在数据库级别,应用以下条件:

    • 数据库所有者可以为数据库订阅一组策略类别。

    • 仅订阅类别中的策略能够控制数据库。

    • 所有数据库隐式订阅默认策略类别。

    在服务器级别,策略类别可以应用于所有数据库。

  • 有效策略
    目标的有效策略是那些控制此目标的策略。仅当满足所有以下条件时,策略才对目标有效:

    • 已启用此策略。

    • 目标属于此策略的目标集。

    • 目标或目标祖先之一订阅了包含此策略的策略组。

使用基于策略的管理解决的问题示例

基于策略的管理有助于解决在以下情况下出现的问题:

  • 公司策略禁止启用数据库邮件或 SQL Mail。创建了一个策略以检查这两个功能的服务器状态。管理员将服务器状态与策略进行比较。如果服务器状态不符合策略,管理员将选择“配置”模式,并且使服务器状态符合策略。

  • AdventureWorks2008R2 数据库的命名约定要求所有存储过程均以字母 AW_ 开头。创建了一个策略以强制实施此策略。管理员对此策略进行测试,并找到一组不符合策略的存储过程。如果将来的存储过程不符合此命名约定,这些存储过程的创建语句将会失败。

允许的评估模式

策略评估模式是由策略所使用的基于策略的管理方面的特征确定的。所有方面都支持**“按需”“按计划”。如果某些事件可以捕获方面状态的更改,则方面支持“更改时: 仅记录”。如果更改方面状态的 DDL 语句具有事务支持,则方面支持“更改时: 禁止”**。可以启用和禁用按这三种执行模式之一自动执行的策略。

在 SQL Server Management Studio 中,**“评估策略”**对话框提供了两个可用于运行策略的选项:

  • 评估
    这将针对所选目标评估策略。

  • 应用
    这使您能够将更改应用到违反策略的适用目标。一些目标无法通过基于策略的管理进行配置。例如,如果您正在评估备份和数据文件是否存在于不同的设备上,则基于策略的管理可以检测到违反此情况的行为;但您不能通过基于策略的管理应用更改来强制策略兼容。

策略管理

策略是使用 Management Studio 创建和管理的。此过程包括以下步骤:

  1. 选择一个基于策略的管理方面,其中包含要配置的属性。

  2. 定义一个条件以指定管理方面状态。

  3. 定义一个策略,其中包含该条件、用于筛选目标集的附加条件以及评估模式。

  4. 检查 SQL Server 实例是否符合该策略。

对于失败的策略,对象资源管理器以红色图标的形式指示严重运行状态警告,此图标位于该目标以及对象资源管理器树中此目标上面的节点旁边。

策略存储

策略存储在 msdb 数据库中。在更改策略或条件后,应对 msdb 进行备份。有关详细信息,请参阅备份 model 和 msdb 数据库时的注意事项

SQL Server 2008 包括可用于监视 SQL Server 实例的策略。默认情况下,数据库引擎中未安装这些策略;不过,可以从默认安装位置 C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\2052 导入这些策略。有关详细信息,请参阅如何导出和导入基于策略的管理策略

可以使用**“文件”/“新建”**菜单直接创建策略,然后将这些策略保存到文件中。这样,在未连接到数据库引擎实例的情况下也可以创建策略。

在当前数据库引擎实例中评估的策略的策略历史记录保存在 msdb 系统表中。不会保留应用于其他数据库引擎实例、Reporting Services 或 Analysis Services 的策略的策略历史记录。有关详细信息,请参阅对基于策略的管理策略进行故障排除

配置警报以通知策略管理员策略失败情况

在使用三种自动评估模式之一的模式执行基于策略的管理策略时,如果发生违反策略的情况,则会在事件日志中写入消息。若要在事件日志中写入此消息时得到通知,您可以创建一个警报以检测此消息并执行操作。该警报应检测下表所示的消息。

执行模式

消息号

更改时: 禁止

(如果为自动)

34050

更改时: 禁止

(如果为按需)

34051

按计划

34052

更改时

34053

若要设置警报以响应基于策略的管理错误消息,请参阅以下主题:

有关警报的其他注意事项

请注意下面有关警报的其他注意事项:

  • 仅为启用的策略引发警报。由于无法启用**“按需”**策略,因此,不会为按需执行的策略引发警报。

  • 如果要执行的操作包括发送电子邮件,您必须配置邮件帐户。建议您使用数据库邮件。有关如何设置数据库邮件的详细信息,请参阅如何创建数据库邮件帐户 (Transact-SQL)

  • 警报安全性:

    在按需评估策略时,将会在用户的安全上下文中执行这些策略。若要写入错误日志,用户必须具有 ALTER TRACE 权限或者是 sysadmin 固定服务器角色的成员。具有更低权限的用户评估的策略不会写入事件日志,并且不会触发警报。

    自动执行模式是以 sysadmin 角色成员的身份执行的。这样,策略便可以写入错误日志并引发警报。

安全性

管理基于策略的管理要求具有 msdb 数据库中 PolicyAdministratorRole 角色的成员身份。此角色具有系统上的所有策略的完全控制权。这种控制权包括创建和编辑策略和条件以及启用和禁用策略。

安全说明安全说明

可能的凭据提升:具有 PolicyAdministratorRole 角色的用户可以创建服务器触发器并计划策略执行,这可能会影响数据库引擎实例的正常运行。例如,PolicyAdministratorRole 可以创建一个策略,它可能会禁止在数据库引擎中创建大多数对象。由于这种可能的凭据提升,只应将 PolicyAdministratorRole 角色授予可信任其控制数据库引擎配置的用户。

将遵循以下安全原则:

  • 系统管理员或数据库所有者可以为数据库订阅策略或策略组。

  • PolicyAdministratorRole 角色的成员可以启用或禁用策略。

  • PolicyAdministratorRole 成员可以创建没有即席执行权限的策略,但具有足够权限的其他用户运行这些策略时,可以成功执行这些策略。

    安全说明安全说明

    可能的凭据提升:具有 PolicyAdministratorRole 角色的用户可以创建一些策略,其中包含使用 ExecuteSqlExecuteWql 函数的条件。如果具有 sysadmin 权限的用户以后执行此策略,则以执行此策略的用户具有的 sysadmin 权限执行策略管理员提供的 Transact-SQL。

  • 即席策略是在用户的安全上下文中执行的。

  • 采用**“按计划”**评估模式的策略使用 sa 登录帐户所拥有的 SQL Server 代理作业。

使用基于策略的管理的注意事项

注意策略会影响某些 SQL Server 功能的工作方式。例如,变更数据捕获和事务复制都使用没有索引的 systranschemas 表。如果启用所有表都必须有索引的策略,则强制策略的兼容会导致这些功能都失效。