在数据库中存储连接字符串的想法是一个不正常的想法,但请先听我说。我们都知道在web.config文件中加密连接字符串是最好的做法,但是如果我们只是完全跳过web.config文件呢?
几个月前,我被要求将数据库从一台服务器移动到另一台服务器。这意味着必须更新访问这些不同数据库的每个程序中的连接字符串。这是2年来第3次我不得不将数据库从一台服务器移动到另一台服务器。所以我想到将连接字符串存储在数据库中并为每个GUID分配要通过Web服务访问的GUID。您只需将连接字符串GUID存储在web.config中,并引用连接字符串Web服务,以便可以请求连接字符串,而不是将连接字符串放在web.config中。加密可以在应用程序级别完成,连接字符串只是加密存储在数据库中。
我已经创建了一个概念验证,它运行正常(它只是在本地内部网上,而不是暴露在互联网上)。
对我来说,好处是显而易见的;例如能够快速更新连接字符串而无需触摸Web应用程序。这意味着您可以构建一个Web应用程序,仅用于编辑数据库中的连接字符串,DBA可以在其中使用,因此在移动数据库时,他们永远不必打扰程序员。
但好处不是我感兴趣的。我对这里的每个人都想做这样的事情感兴趣吗?
答案 0 :(得分:4)
从主web.config中取出连接字符串,并将它们放在单独的配置文件中。对于您的所有应用,此文件将是相同的,因此如果必须更改,您只需将相同的文件复制并粘贴到所有应用文件夹中,而不是单独编辑每个配置。
答案 1 :(得分:2)
我可以看到的主要缺点是显而易见的性能损失(如果您然后缓存连接字符串)和单点故障,您可能会引入所有应用程序(除非您要对此服务进行负载平衡,这似乎有点矫枉过正)
答案 2 :(得分:1)
当您的网络服务更改位置时怎么办?然后你必须更新所有的web.configs。
您的应用程序是在同一台服务器上,还是只分布在几台服务器上?您可以编辑机器web.configs以包含数据库连接strign以节省大量重复。
答案 3 :(得分:1)
我倾向于做两件事之一。我将连接存储在Machine.Config中,或者我将创建一个新的主机名,它只引用数据库服务器。然后我在hosts文件中放入一条记录。
这样做的好处是,当我从本地盒子,dev qa或生产环境移动时,我永远不必更改配置文件。
答案 4 :(得分:1)
非常有趣的问题。 我发现它是因为我有同样的想法。
它似乎与UDDI非常相似,它为您提供了另一层间接可能的安全增强功能。提高了可维护性(除了您可以解决的单点故障之外)。
当然有DNS可以解决主机名的问题,但是使用这样的Web服务,你有很多可能性,比如根据谁的要求返回不同的连接字符串(取决于SSL证书或用户/通行证或令牌,目录服务,如AD,LDAP,用户角色等 - 天空是限制:)
此外,所有连接字符串都将受到适当保护,并且无法用于窥探好奇用户的眼睛。
起初这个想法似乎有悖常理,但我想的越多,我就越相信企业级公司可以从引入这样的解决方案中获益良多。
答案 5 :(得分:0)
我知道我并不是唯一一个有这个想法的人。我最近才开始思考一下自定义应用程序和Intranet站点的分类(更不用说大量的数据库和服务器)了。在我看来,WCF服务可以或应该以这样的方式编写,即以多种方式返回数据库连接信息:连接字符串,实际连接或仅服务器和数据库名称。此外,服务本身应该可以从中央辅助数据库和表中获取其信息,该数据库和表可用于管理各种连接点。例如:给我会计数据库连接,生产或开发等。