65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 SQL Server 基于策略的管理,让每个人都远离破坏数据库对象命名约定。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2013 年 2 月 15 日

CPOL

5分钟阅读

viewsIcon

27924

使用 SQL Server 基于策略的管理标准化数据库对象名称。

引言

对于每个数据库项目来说,维护正确的数据库对象命名约定都至关重要。设想一个有 10-15 名数据库开发人员共同工作的场景。如果其中一个开发人员创建了一个名为 Customers_tbl 的表,而另一个开发人员创建了一个名为 Tbl_Department 或 Salary 的表,那么这对于未来的维护和扩展性来说可能会非常麻烦。另一个常见问题是创建以“sp_”为前缀的存储过程。众所周知,创建以“_sp”为前缀的对象意味着 SQL Server 的特殊对象,SQL Server 总是首先尝试在 master 数据库中定位该对象。因此,始终建议避免以“_sp”为前缀的对象命名。为了摆脱这种情况,现在每个团队都有自己的策略来维护精确的数据库对象命名约定,这是一种非常常见的做法。基于策略的管理是 SQL Server 最出色的功能之一,它使数据库开发人员或 DBA 的这项任务变得极其方便。

首先定义策略 

假设我们需要一些数据库对象命名策略,这些策略将强制数据库用户按照定义的命名策略创建对象名称。

  • 任何对象名称都不能以 sp_ 为前缀。
  • 对于表,不允许存在值为“tbl”的前缀或后缀。
  • 每个存储过程名称都必须带有后缀 _usp(用户定义的存储过程)。
  • 每个用户定义的函数都必须带有 _udf 后缀。
  • 每个视图都必须带有后缀 _vw。

在本文中,我们不会实现所有这些策略,而是将向您展示如何使用 SQL Server 基于策略的管理创建以下策略。

“AdventureWorks2012 数据库中的所有存储过程都不能以‘sp_’开头,并且每个存储过程名称都必须以‘_usp’结尾(后缀)。”

实施

创建满足策略的条件

现在,我们将尝试从我们声明的策略中找出条件。

  • 条件 1:“AdventureWorks2012 数据库的所有存储过程”表示我们的策略仅适用于 AdventureWorks2012 数据库。
  • 条件 2:“不能以‘sp_’开头,并且每个存储过程名称都必须以‘_usp’结尾。”此部分表示存储过程不能带有前缀 sp_,并且必须带有后缀‘_usp’。

我们已经定义了条件,现在让我们一步步创建它们。

  1. 打开 SSMS,选择管理 > 策略管理 > 条件
  2. 右键单击条件节点并选择“新建条件...”
  3. 新的条件创建窗口将如下所示:
图 1:创建条件 1

现在创建条件 1。名称字段中输入AdventureWorks2012 数据库。从方面下拉列表中选择数据库。最后,在表达式网格中,在“字段”单元格中输入@Name,在“值”单元格中输入'AdventureWorks2012' 。(不要忘记在“值”单元格中输入单引号 ('' ))。现在单击“确定”按钮。展开“条件”节点,您将看到新创建的条件。

图 2:条件 1 已创建

要创建第二个条件,请重复步骤 2,并在“创建新条件”窗口的特定字段中输入以下值。

名称 = 存储过程命名条件

方面 = 存储过程

在表达式网格下

与或 = 字段 = @Name 运算符 = NOT LIKE 值 = 'sp_%'

与或 = AND 字段 = @Name 运算符 = LIKE 值 = '%_usp'

图 3:创建条件 2。

点击“确定”按钮也创建此条件。现在我们已经准备好两个条件。

工作原理

从“方面”中选择“存储过程”表示该表达式仅适用于存储过程。我们在表达式部分所做的配置只是为了符合第二个条件。表达式将是

@Name(name of the stored procedure)  NOT LIKE 'sp_%'  AND @Name LIKE  '%_usp' 

创建策略

  1. 从 SSMS 中选择“管理”>“策略管理”>“策略”
  2. 右键单击“策略”并点击“新建策略...”上下文菜单。
  3. 在“名称:”字段中输入存储过程命名策略。此时,您将看到“名称:”字段后面的“已启用:”复选框处于禁用模式。
  4. 从“检查条件:”下拉列表中选择存储过程命名条件
  5. 针对目标: (如下所示)

图 4:创建策略时设置目标

单击数据库旁边的向下箭头,然后从上下文菜单中选择 AdventureWorks2012 数据库条件。

  1. 从“评估模式:”下拉列表中选择“发生更改时:阻止”。

  2. “已启用:”复选框现在已变为启用状态,请勾选它。

此时整个窗口如下所示:

policy create

图 5:创建策略
  1. 按“确定”完成。

我们完成了!现在让我们测试我们的工作。

  1. 从 SSMS 打开一个新的查询窗口并指向数据库 AdventureWorks2012 或运行以下脚本:
    USE AdventureWorks2012
    GO
  2. 让我们尝试创建一个带有 sp_ 前缀的存储过程。

    First SP Attempt Fail

    图 6:带 sp_ 前缀的 SP 创建尝试失败
  3. 再次尝试创建一个带有 sp_ 前缀和 _usp 后缀的相同过程。

    图 7:带 sp_ 前缀和 _usp 后缀的 SP 创建尝试失败。

    这次我们的尝试也失败了。

  4. 现在,让我们尝试通过完全遵守策略来创建存储过程,例如不给 sp_ 前缀并给出 _usp 后缀,如下所示:

    图 8:SP 创建尝试成功。

万岁!!!过程创建成功。

现在让我们讨论一下 SQL Server 基于策略的管理的一些术语和概念。

什么是基于策略的管理

基于策略的管理是一种数据库管理方法,它提供了一个管理框架,用于根据一组预定义的标准或策略自动化任务。这种标准化活动可以在多个服务器上实施。

基于策略的管理方案

关于此有一个非常好的 MSDN 文章。请点击以下链接:

http://msdn.microsoft.com/zh-cn/library/bb522466(v=sql.105).aspx 

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

在 MSDN 上也能找到关于这个主题的详细解释。请看这里:

http://msdn.microsoft.com/zh-cn/library/bb510667.aspx 

结论

在管理安全性、复杂性、配置可靠性以及在大规模分布式环境中强制执行严格的合规策略方面,基于策略的管理无疑提供了广泛的功能。

© . All rights reserved.