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