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

时间:2015-10-13 14:19:02

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

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

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

我在Visual Studio 2013中运行架构比较(使用SSDT版本12.0.50927.0),当出现差异时,我将其全部排除在外:

VS2013 schema comparision

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

<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>

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

VS2010 schema Comparision

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

class CRUDController extends Controller
{

public function cloneAction()
{
    $object = $this->admin->getSubject();
    $id = $object->getId();
    return new RedirectResponse($this->generateUrl('admin_index', array('id' => $id))); //this is my custom action
}
}

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

2 个答案:

答案 0 :(得分:1)

在架构比较结果中,这些权限的差异将显示在“数据库选项”&gt;下。权限(而不是用户下)。您应该可以通过取消选中“数据库选项”下的这些项来排除这些更改。

或者,您可以通过取消选中Schema Compare Options对话框的Object Types选项卡中的Database Options,Permissions和Extended Properties来禁用权限比较。

答案 1 :(得分:0)

您可以使用我的部署贡献者来执行此操作:

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

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