gpt4 book ai didi

asp.net - 如何保证多个connectionString密码安全、独立且易于部署?

转载 作者:行者123 更新时间:2023-12-02 15:30:01 24 4
gpt4 key购买 nike

我知道这里已经有很多关于这个主题的问题(我已经阅读了尽可能多的问题),但我还无法弄清楚如何最好地满足我的特定标准。以下是目标:

  1. ASP.NET 应用程序将在几个不同的 Web 服务器上运行,包括用于开发的本地主机工作站。 这意味着使用机器 key 加密 web.config 已经过时了。 Web 服务器的每种“类型”或环境(dev、test、prod)都有其自己相应的数据库(dev、test、prod)。我们希望分离这些连接字符串,以便处理“dev”代码的开发人员无法看到任何“prod”连接字符串密码,也不允许这些生产密码部署到错误的服务器或提交到 SVN。/p>

  2. 应用程序应该能够根据服务器名称(使用 switch 语句)决定尝试使用哪个连接字符串。例如,“localhost”和“dev.example.com”应该知道使用 DevDatabaseConnectionString,“test.example.com”将使用 TestDatabaseConnectionString,“www.example.com”将使用例如,使用 ProdDatabaseConnectionString。这样做的原因是为了限制发生任何部署事故的可能性,即错误类型的 Web 服务器连接到错误的数据库。

  3. 理想情况下,完全相同的可执行文件和 web.config 应该能够在任何这些环境上运行,而无需在每次部署时单独定制或配置每个环境(这看起来很容易)在部署期间有一天忘记/弄乱,这就是为什么我们不再只需要在每个目标上更改一个连接字符串)。目前部署是通过 FTP 完成的。 更新:使用“构建事件”并修改我们的部署过程可能不是一个坏主意。

  4. 我们将无法通过命令行访问生产 Web 服务器。这意味着使用 aspnet_regiis.exe 加密 web.config 已经过时了。 更新:我们可以通过编程方式执行此操作,因此这一点没有实际意义。

  5. 我们希望不必在密码更改时重新编译应用程序,因此使用 web.config(或 db.config 或其他)似乎最有意义。

  6. 开发人员不应该能够获取生产数据库密码。如果开发人员将源代码检查到他们的本地主机笔记本电脑上(这将确定它应该使用 DevDatabaseConnectionString,还记得吗?)并且笔记本电脑丢失或被盗,则应该无法获取其他连接字符串。因此,不能考虑使用单个 RSA 私钥来解密所有三个密码。 (与上面的#3相反,如果我们走这条路,我们似乎确实需要三个单独的 key 文件;这些文件可以在每台机器上安装一次,并且如果错误的 key 文件部署到错误的服务器,最糟糕的情况是应该发生的是应用程序无法解密任何内容,并且不允许错误的主机访问错误的数据库!)

  7. 更新/附录:该应用程序有几个独立的面向 Web 的组件:一个经典的 ASMX Web 服务项目、一个 ASPX Web 表单应用程序和一个较新的 MVC 应用程序。为了避免在每个单独的环境的每个单独的项目中配置相同的连接字符串,最好让它只出现在一个地方。 (可能在我们的 DAL 类库或单个链接的配置文件中。)

我知道这可能是一个主观问题(要求采取“最佳”方式来做某事),但考虑到我提到的标准,我希望确实会出现一个最佳答案。

谢谢!

最佳答案

集成身份验证/Windows 身份验证是一个不错的选择。没有密码,至少没有需要存储在 web.config 中的密码。事实上,这是我更喜欢的选项,除非管理员明确将其从我手中夺走。

就个人而言,对于因机器而异的任何内容(不仅仅是连接字符串),我使用此技术从 web.config 中放入外部引用:http://www.devx.com/vb2themax/Tip/18880

当我将代码越过栅栏扔给生产服务器管理员时,他获得了一个新的 web.config,但没有获得外部文件 - 他使用了之前的文件。

关于asp.net - 如何保证多个connectionString密码安全、独立且易于部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3019427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com