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

 壹滒_918 发布于 2022-12-29 20:07

我想在Jenkins中创建一个发布任务,以自动发布我的数据库更改以及我的应用程序.

如果我理解正确,通常的做法是创建一个发布配置文件,其中包括数据库名称以及用于部署的帐户的帐户(登录名和密码).

这意味着部署帐户用户名和密码将以明文形式存储在每台开发人员计算机以及版本控制服务器和持续集成服务器上.

即使我为部署创建了特定的登录名和密码,但对我来说似乎相当不安全.

有解决方法吗?我只能考虑在持续集成服务器上的msbuild命令行中替换密码.

1 个回答
  • tl;博士版

    Windows身份验证是连接到SQL Server实例的首选安全方法,如果可以使用它,则建议将其用于连接.

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

    长版

    Windows身份验证:如果可能的话,使用Windows身份验证,根据需要为需要的用户提供权限.对于持续集成方案,您需要为构建服务器执行的帐户提供适当的权限 - 完整详细信息位于SSDT博客的最新白皮书中.

    SQL身份验证:如果查看发布配置文件(打开方式... Xml编辑器),您将看到密码信息实际上并未存储在那里.

    如果您选择"保存密码",您将拥有"持久安全信息=真;" 存储在连接字符串中而不是密码本身.

    当连接到SSDT中的服务器/数据库并启用"保存密码"时,连接信息将被加密并存储在"HKEY_CURRENT_USER\Software\Microsoft\SSDT\ConnectionStrings"下的注册表中.这必须存在于计算机上才能使用发布配置文件成功发布.

    因此,在团队环境中,每个用户都需要至少连接一次,然后发布配置文件才能为他们工作.但是,密码将在用户计算机上安全加密.

    对于构建服务器,您的选项更受限制.一种可能性是手动以编译服务器用户身份登录,然后连接到数据库,但这不是很可扩展.为了避免您提到的安全性较低的选项,您需要实现自己的逻辑以安全地保存密码.您可以查看受保护的数据API,该API可用于执行与SSDT类似的操作,但在每台计算机级别上,或使用加密的配置文件.

    如果您必须使用SQL身份验证,我认为将密码作为构建配置的一部分传递给发布操作可能是在开发简易性和安全性之间进行权衡的"最佳"方式.至少通过这种方式,您可以限制谁可以在TFS中查看和编辑构建配置,而常规开发人员也不会看到它.

    2022-12-29 20:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有