在SSDT比较中排除模式级权限



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 schema比较

当我排除模式差异时,生成的脚本不包括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声称支持这个特性,但实际上并不支持。还是我错过了什么?

您可以使用我的部署贡献者:

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

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

爱德

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

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

最新更新