【问题标题】:Excluding schema-level permissions in SSDT comparisons在 SSDT 比较中排除架构级权限
【发布时间】:2015-10-13 14:19:02
【问题描述】:

TL;DR:在 Visual Studio 2013 中进行架构比较时,是否可以排除在架构上授予的权限?


我有一个仅存在于生产服务器上的用户帐户,以及一个仅存在于非生产服务器上的相同用户。这些用户被授予在数据库架构级别执行。

我在 Visual Studio 2013 中运行架构比较(使用 SSDT 版本 12.0.50927.0),当出现差异时,我排除了所有差异:

VS2013 schema comparision

但生成的更改脚本总是希望对这些用户强制授予/撤销:

GO
PRINT N'Dropping Permission...';

GO
REVOKE EXECUTE
ON SCHEMA::[dbo] TO [NonProductionUser] CASCADE;

GO
PRINT N'Creating Permission...';

GO
GRANT EXECUTE
ON SCHEMA::[dbo] TO [ProductionUser];

经过一番研究,我发现在以前的版本中,可以从更新脚本中排除这些语句。在 Visual Studio 2010 中运行相同的架构比较时(使用 SSDT 版本 10.3.31009.2),我会看到排除架构差异的选项:

VS2010 schema Comparision

当我排除架构差异时,生成的脚本不包含 REVOKE/GRANT 语句。保存模式比较并打开 scmp 文件显示已生成以下 XML:

<ExcludedSourceElements>
    <SelectedItem Type="Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlPermissionStatement, Microsoft.Data.Tools.Schema.Sql, Version=10.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <Name>Grant.Execute.Schema</Name>
      <Name>ProductionUser</Name>
      <Name>dbo</Name>
      <Name>dbo</Name>
    </SelectedItem>
</ExcludedSourceElements>
<ExcludedTargetElements>
    <SelectedItem Type="Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlPermissionStatement, Microsoft.Data.Tools.Schema.Sql, Version=10.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <Name>Grant.Execute.Schema</Name>
      <Name>NonProductionUser</Name>
      <Name>dbo</Name>
      <Name>dbo</Name>
    </SelectedItem>
</ExcludedTargetElements>

我可以拿这个scmp文件并在VS2013中打开它没有问题,但结果是一样的:排除在架构上授予的权限的选项不可用。真正奇怪的是,如果我使用 VS2013 保存 scmp 文件,“版本”列出的值从 10.3.0.0 更改为 12.0.0.0。好像 SSDT 声称支持此功能,但似乎不支持。还是我错过了什么?

【问题讨论】:

  • 创建一个分配这些权限的角色并将您的用户添加到该角色是否有意义?您应该能够从比较中排除角色和角色成员。

标签: sql-server-data-tools schema-compare


【解决方案1】:

你可以使用我的部署贡献者来做:

https://the.agilesql.club/Blogs/Ed-Elliott/HOWTO-Filter-Dacpac-Deployments

使用过滤器 IgnoreSecurity 或者您可以过滤特定对象。

埃德

【讨论】:

  • 谢谢!不久前我确实偶然发现了您的项目,我正在查看它。我确实有一个问题:在您之前在 StackOverflow 上的一个 cmets 中,您说“如果您在 SSDT 中使用发布选项(在 Visual Studio 内部),那么将它们添加到发布 profile.xml 中”。您能否指出有关如何在 xml 文件中准确引用 dll 的任何文档或示例?
【解决方案2】:

在架构比较结果中,这些权限的差异将出现在“数据库选项”>“权限”下(而不是“用户”下)。您应该能够通过取消选中数据库选项下的这些项目来排除这些更改。

您也可以通过取消选中“架构比较选项”对话框的“对象类型”选项卡中的“数据库选项”、“权限”和“扩展属性”来禁用权限比较。

【讨论】:

  • 我正在使用 VS 2017 并且看不到取消选中数据库选项 > 权限的功能。我在脚本输出中看到“GRANT ALTER”和“GRANT CONTROL”语句,需要排除这些语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
相关资源
最近更新 更多