在machine.config中存储连接字符串,并将它们存储在web.config中

Wal*_*ssa 8 asp.net connection-string configuration-files

对于专用服务器,最好将连接字符串存储在web.config或machine.config中吗?每种方法的优点和缺点是什么?

谢谢

编辑:我关注这里的安全性,所以问题是哪种方法更安全.

Col*_*kay 10

我会一直使用web.config,因为这是每个人都期望的.通过在不寻常的地方存储连接字符串,给予必须维护网站的人更加困难是没有意义的.

额外

基于OP对安全方面感兴趣的附加信息,而不是我添加以下内容的一般原因.

我仍然不会在machine.config中存储连接字符串.如果这样做,则计算机上运行的任何.NET应用程序都可以访问您的连接字符串.

web.config是受保护的文件.默认情况下,IIS不会提供它,除非你做错了配置.

  • 我的建议没有提到维护者是谁.即使是你,我的建议仍然有效.保持简单.你可能已经忘记了6个月了. (2认同)

JBr*_*oks 9

我更喜欢在machine.config中保留我的连接字符串.

我的连接字符串在DEV,QA和PROD环境之间是不同的,如果我将它们保存在web.config中,我无法安全地吹走我的目标目录并复制新代码.或者我必须记住部署除web.config之外的所有内容,这会在web.config的其他部分发生更改时产生问题.

这取决于你的情况,但是当它变得有点复杂时,在错误的环境中使用错误的连接字符串的风险太大了.实际上我们遇到过测试遇到错误数据库的情况,因为无意中移动了连接字符串.Machine.config用于特定于机器的项目 - 因此名称.它永远不会从机器移动到机器.

所以在我的machine.config中我有多个连接字符串,如blogConnString,forumConnString,projectxConnString等.我不认为这个混合设置适用于不同的站点,我认为它在maching.config中保持机器级别设置.

你担心安全性,我认为一旦他们在盒子上他们同样安全.但是如果连接字符串在web.config中,它通常会在源代码控制,开发人员的办公桌,备份文件,安装计划,部署集等中结束.这使得web.config方式对我来说不那么安全.

最后,另一种方法是将它放在一个完全不同的配置文件(比如WebEnvironment.confg)中,然后在web.config中引用它.此文件将位于不在您网站下的实际目录中,但实际上位于您的网站下.更多细节在这里.

  • @CraigTP,非常好。我工作的公司有 300 名开发人员(其中一些是承包商员工,他们通常会在几周内来来去去),所以这不是信任每个人那么简单,而是理想的。这对您的客户及其用户的安全是不负责任的。在英国,您将违反数据保护法 (https://ico.org.uk/for-organisations/guide-to-data-protection/principle-7-security/) (2认同)

Cra*_*gTP 5

我个人来说,永远不会将我的连接字符串存储在我的machine.config文件中,只能在web.config中存储.

你说它是一个专用服务器,但这个服务器专用于单个Web应用程序吗?
如果没有,您现在有一个文件(machine.config)可以有效地共享多个(可能是不相关的)Web应用程序的配置数据.根据这些应用程序的数量,如果您需要将它们移动到另一台服务器,使用machine.config可能会非常混乱.

即使服务器专门为一个Web应用程序,你可能会进行开发,并在其他机器上测试.由于machine.config通常不是包含在ASP.NET Web应用程序项目的文件集中的文件,因此您可能不得不竭尽全力将machine.config部署到各个dev/test中. /生产机器,并确保其中的其他(非连接字符串)相关配置对于该机器是正确的.

使用web.config存储数据库连接字符串具有完全的逻辑意义,并且几乎所有ASP.NET开发人员都完全可以使用它,即使您有多个应用程序将在完全相同的数据库服务器上使用完全相同的数据库.将此配置保存在每个应用程序的web.config中允许每个应用程序更加独立,而不依赖于某些其他"外部"文件.

我通常查看machine.config和框架本身使用的东西,它属于一台机器并且特定于该机器.我很少自己去接触它.我将web.config视为一个文件,它是您的Web应用程序项目的一部分,并随着项目的移动而"移动"并部署到不同的计算机上.

另外,不要忘记通过重新定义特定应用程序的web.config文件中的某些配置元素,可以在每个应用程序的基础上"覆盖"machine.config中定义的许多内容.

当然,编辑/更改machine.config文件有一些正当理由(例如,Web场中的多个Web服务器可能需要像machine.config中的加密/解密密钥一样进行同步),但是,我不相信数据库连接字符串是其中一个有效的原因.