【发布时间】:2015-10-13 14:19:02
【问题描述】:
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 声称支持此功能,但似乎不支持。还是我错过了什么?
【问题讨论】:
-
创建一个分配这些权限的角色并将您的用户添加到该角色是否有意义?您应该能够从比较中排除角色和角色成员。
标签: sql-server-data-tools schema-compare