SSDT:如何保护包含在发布配置文件中的密码?

3
我想在Jenkins中创建一个发布任务,以便自动发布我的应用程序和数据库更改。
如果我理解正确的话,一种常见做法是创建一个发布配置文件,其中包括数据库名称以及用于部署的帐户(登录名和密码)。
这意味着部署帐户的用户名和密码将以明文形式存储在每台开发人员计算机上,以及版本控制服务器和持续集成服务器上。
即使我为部署创建了特定的登录名和密码,但对我来说似乎非常不安全。
有没有解决方法?我只能想到在持续集成服务器上通过msbuild命令行替换密码。

Windows身份验证绝对是更好的选择,但您始终可以在Jenkins中覆盖连接字符串,然后锁定该作业,以便其他人无法查看详细信息。 - Peter Schott
1个回答

6

简短版本

Windows身份验证是连接到SQL Server实例的首选和安全方法,如果可能的话,请使用它以建立连接。

如果使用SQL身份验证,则发布配置文件中默认情况下不保存密码。对于构建服务器和其他共享配置文件方案,您可能需要接受较低级别的安全性(通过编辑发布配置文件以添加密码或在构建配置中将其设置为参数),或以其他方式解决此问题(自定义脚本从某种加密值等秘密存储库中读取它)。

详细说明

Windows身份验证:如果可能,请尽量使用Windows身份验证,并根据需要为需要权限的用户授予权限。对于持续集成场景,您需要为构建服务器执行下的账户分配适当的权限-详细信息请参见SSDT博客上的最近白皮书。

SQL身份验证:如果查看发布配置文件(使用“打开方式... Xml编辑器”),您将会发现密码信息实际上并没有存储在其中。

  • 如果选择“保存密码”,则将“Persist Security Info=True;”存储在连接字符串中,而不是密码本身。
  • 当使用启用了“保存密码”的SSDT连接到服务器/数据库时,连接信息会被加密并存储在注册表中的“HKEY_CURRENT_USER\Software\Microsoft\SSDT\ConnectionStrings”下。在成功使用发布配置文件之前,必须在机器上存在此项。
  • 因此,在团队环境中,每个用户都需要至少连接一次,然后该发布配置文件才能为他们工作。但是,密码将在用户机器上安全加密。
  • 对于构建服务器,您的选择可能更有限。一种可能性是手动登录作为构建服务器用户,然后连接到数据库,但这并不是很可扩展的。要避免您提到的较不安全的选项,您需要实现自己的逻辑以安全地持久化密码。您可以查看Protected Data API,它可用于执行类似于SSDT的操作,但在每台机器上执行,或使用加密配置文件

如果必须使用SQL身份验证,我认为在构建配置的一部分中将密码传递给发布操作可能是在开发和安全性之间取得平衡的“最佳”方式。至少这样,您可以限制谁可以查看和编辑TFS中的构建配置,常规开发人员将无法看到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接