Dog*_*ars 3 sql-server-2012 ssdt
我们正在尝试通过开发、测试和生产实现数据库部署的自动化。我们使用 SSDT 的方法是比较来自不同环境的 DACPAC 以生成更新脚本,并作为最后一步,将正确的 Windows 登录映射到正确的用户。
查看 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)
我们做错了什么还是这是一个错误,我已经搜索过但看不到有关此属性的太多信息,是否有人使用它可以提供帮助,或者是否有其他方法?
相关问题:这里
我发现使用 SqlPackage.exe 不会删除安全对象。
我也遇到了同样的问题。展望未来,我们将使用 DACPAC 部署数据库更改。我们需要一种从更新过程中排除用户、角色和登录名的方法,这样它们就不会从目标 SQL Server 中删除。
我们的数据库安装在数百个客户站点上,并且许多 SQL Server 安装都由该公司的 DBA 进行了安全设置。他们通常会添加自己的域登录名和用户,并且在某些情况下比我们的默认值更严格地限制角色。
我注意到在 SQL Server Management Studio 2012 中选择“升级数据层应用程序”选项时,我没有选择忽略安全对象。审查实际上表明它将放弃用户和角色。
但是当我使用 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
| 归档时间: |
|
| 查看次数: |
7049 次 |
| 最近记录: |