在部署 VS 数据库项目 (DACPAC) 时处理 SQL Login/Passwords

Handling SQL Login/Passwords when deploying a VS Database Project (DACPAC)

在初始发布到 SQL 服务器 (2019) 后以及在初始创建我的数据库项目(数据层应用程序)后再次发布时失败并显示漂移报告。没有在外部或 VS 项目内对数据库进行任何更改。

漂移报告:

<Modifications>
    <Object Name="[DummySqlLogin]" Parent="" Type="SqlUser" />
</Modifications>

按照 2016 年 question/answer 的回答中的建议尝试规避此问题。

“在您的发布配置文件中,使用以下内容”

<ExcludeUsers>True</ExcludeUsers>
<ExcludeLogins>True</ExcludeLogins>

与 OP 不同,这确实允许我发布到我的数据库,这让我面临如何处理 logins/passwords 的问题,尤其是在我们要发布到不同环境的情况下。

我计划使用 SQLCMDVARIABLES 为不同类型的环境维护单独的发布配置文件,并且可以在其中为每个环境指定密码,然后在 VS 数据库项目中放置一个预部署脚本,该脚本将设置 Logins/Passwords 对于 SQL 帐户并使用 SQLCMD 变量。

没有更好的方法吗?这可能适用于只有 5-10 个环境的情况,但如果有 100 个环境怎么办?

注意*我想避免使用 Redgate 等商业工具。

这是一种常见的方法: environments, deploy targets are no project sources.

对于特定的登录名、用户、密码也是如此。这些是 security/administrations 个特定于服务器的项目。它们取决于环境,而不是产品功能。为什么产品、项目来源会依赖于它们?想象一下,由于其中一台服务器的安全原因,您必须更改密码。你能在逻辑上将它与重新编译所有源代码联系起来吗?

我建议考虑从 SSDT 项目中删除所有安全项目,可能除了角色(并配置 publish.xml 以忽略所有已删除的对象类型)。维护 100 多台服务器肯定需要不同的工具和方法,SSDT、dacpacs 与它无关。该解决方案可以基于 Octopus 部署、Ansible 或其他。