在 Dacpac 比较期间忽略登录映射

Dog*_*ars 3 sql-server-2012 ssdt

我们正在尝试通过开发、测试和生产实现数据库部署的自动化。我们使用 SSDT 的方法是比较来自不同环境的 DACPAC 以生成更新脚本,并作为最后一步,将正确的 Windows 登录映射到正确的用户。

/p:IgnoreUserLoginMappings

查看 SqlPackage.exe文档,有一个属性IgnoreUserLoginMappings似乎暗示它会忽略映射,因此它们不包含在 dacpac 中,因此不会在比较和脚本生成期间更新。但是,当我们在提取过程中使用此属性时,生成的用户无需登录,就像 dacpac 中的这样:

<Element Type="SqlUser" Name="[Domain\Account]">
  <Property Name="IsWithoutLogin" Value="True" />
    <Relationship Name="DefaultSchema">
      <Entry>
        <Annotation Type="PersistedResolvableAnnotation" Name="[Domain\Account]">
                <Property Name="TargetTypeStorage" Value="SqlSchema" />
        </Annotation>
         </Entry>
    </Relationship>
</Element>
Run Code Online (Sandbox Code Playgroud)

这不是我们想要的!随后生成的更新如下所示:

CREATE USER [Domain\Account] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [Domain\Account];
Run Code Online (Sandbox Code Playgroud)

我们做错了什么还是这是一个错误,我已经搜索过但看不到有关此属性的太多信息,是否有人使用它可以提供帮助,或者是否有其他方法?

相关问题:这里

sea*_*ean 6

我发现使用 SqlPackage.exe 不会删除安全对象。

我也遇到了同样的问题。展望未来,我们将使用 DACPAC 部署数据库更改。我们需要一种从更新过程中排除用户、角色和登录名的方法,这样它们就不会从目标 SQL Server 中删除。

我们的数据库安装在数百个客户站点上,并且许多 SQL Server 安装都由该公司的 DBA 进行了安全设置。他们通常会添加自己的域登录名和用户,并且在某些情况下比我们的默认值更严格地限制角色。

我注意到在 SQL Server Management Studio 2012 中选择“升级数据层应用程序”选项时,我没有选择忽略安全对象。审查实际上表明它将放弃用户和角色。

升级 DTA 审查的屏幕截图

但是当我使用 SqlPackage.exe 时,它​​没有删除安全对象。这是因为参数“DropObjectsNotInSource”默认设置为 false。

"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /Action:Publish /SourceFile:.\bin\debug\SandBox.dacpac /TargetServerName:sandboxserver /TargetDatabaseName:SandBox
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是,如果您想从数据库中删除已弃用的对象,则需要将这些删除添加到部署后脚本中。

我希望微软将来会添加这个功能。这些对象通常由 DBA 而不是开发人员管理。

在这里投票:https : //connect.microsoft.com/SQLServer/feedback/details/775839/ssdt-add-publication-setting-to-ignore-database-users