TL;DR:在 Visual Studio 2013 中进行架构比较时,是否可以排除对架构授予的权限?
我有一个仅存在于生产服务器上的用户帐户,以及一个仅存在于非生产服务器上的相同用户。这些用户被授予在数据库模式级别执行。
我在 Visual Studio 2013 中运行架构比较(使用 SSDT 版本 12.0.50927.0),当出现差异时,我排除了所有差异:
但是生成的更改脚本总是希望对这些用户强制授予/撤销:
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)时,我会看到排除架构差异的选项:
当我排除架构差异时,生成的脚本不包括 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 声称支持此功能,但似乎不支持。还是我错过了什么?