我收集了一篇(希望有用的)总结,介绍了我为完成这篇文章的主题而研究的方法,以及我遇到的问题。请告诉我你是否找到了其他更好的方式,特别是如果他们解决了我提到的方法没有解决的问题。
在web.config中保留连接字符串,并使用XDT / msdeploy转换根据我的活动构建配置(例如,web.PublicTest.config文件)将其替换为设置。我的问题是我合并并将一些特定于服务器的设置埋入具有许多配置元素的全局相同的文件中。此外,我无法在多个对等级应用程序之间共享连接字符串定义。
为web.config中的连接字符串指定configSource =“DeveloperLocalConnectionStrings.config”值,XDT将此值转换为指向我的代码库中多个特定于环境的文件之一。我的问题是我将所有环境的密码发送到所有目的地(当然还有SVN),并且未使用的配置部分位于等待意外使用的服务器上。
machine.config文件中的特定连接字符串,而不是web.config。问题:heck期望在machine.config中找到连接字符串的人,以及因此导致意外名称冲突的可能性很高。
指定configSource =“LocalConnectionStrings.config”,不要转换值,并编辑项目xml以排除连接字符串配置的部署。 http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment - 这是我发现的解决我对专有(非分布式)Web应用程序需求的最佳解决方案,但我很偏执,有一天会有另一个团队成员来复制生产站点以测试一些理由,瞧!现在正在UAT期间修改生产数据库。 (更新:我发现在这种情况下我不能使用一键发布,只有msdeploy命令行和-skip参数。如上所述排除文件与将其设置为“无”编译操作相同,而不是“内容“,并导致包从部署目标中删除它。”
连接部署包以提示连接字符串(如果尚未设置)(我不知道如何执行此操作,但我知道这是可能的)。这将与上面的#4类似。
指定configSource =“.. \ ConnectionStrings.config”。对我的需求很有用,因为我可以在我选择的应用程序之间共享配置,并且在我的应用程序目录中没有任何特定于机器的东西。不幸的是,在这个属性中不允许使用父路径(就像它们用于'appSettings file =“”' - 请注意,你可以在configSource = reference中使用file = spiffily)。
P.S。这里讨论了其中一些解决方案:ASP.Net configuration file -> Connection strings for multiple developers and deployment servers
答案 0 :(得分:3)
使用SQL Server时,您还可以使用Integrated Security / SSPI并将WebServer计算机登录添加到Sql Server。
这样您就不必在web.config中公开任何内容,并且您可以像对任何其他数据库用户一样向该登录授予角色。
虽然您必须了解要采取的含义和安全注意事项,因为作为该机器执行的任何恶意代码都可以访问Sql Server。
问候 奥莱答案 1 :(得分:1)
使用hostname作为connectionstring的键,这样您就可以自动选择数据源。确保选择例程没有错误(更改主机名 - 测试!)...
不要把它放在web.config中,写一个ini文件,这样就没有XML编码了。
使用私钥/公钥(RSA / PGP)加密其中的密码。不要使用明文或对称密钥,这同样糟糕。
答案 2 :(得分:0)
查看我的以下博文:Protecting asp.net machine keys and connection strings
如果您确实使用了Quandary的答案,请使用不在网站文件夹中的密钥,就像asp.net使用受保护的配置部分一样。
我们手动批准对进入暂存/生产的web.config的更改。我们在可能的情况下使用集成而不是用户名,但我们在后一种情况下使用的选项是在SVN中只有占位符用于用户名/密码。
我们过去曾使用过单独的配置文件,但是我们遇到了其他类型的web.config修改问题,所以我们最近将它锁定在一个文件中。