1

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


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

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

VS2013 架构比较

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

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架构对比

当我排除架构差异时,生成的脚本不包括 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 声称支持此功能,但似乎不支持。还是我错过了什么?

4

2 回答 2

1

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

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

于 2015-10-13T19:10:35.320 回答
1

您可以使用我的部署贡献者来做到这一点:

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

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

埃德

于 2015-10-13T17:28:50.980 回答