5

我收集了一份(希望有用的)总结,总结了我为完成这篇文章的主题而进行的研究,以及我遇到的问题。请告诉我您是否找到了您更喜欢的其他方法,特别是如果它们解决了我提到的方法没有解决的问题。

  1. 将连接字符串保留在 web.config 中,并使用 XDT/msdeploy 转换根据我的活动构建配置(例如,web.PublicTest.config 文件)将它们替换为设置。我的问题是我将一些特定于服务器的设置合并并隐藏到一个具有许多配置元素的全局相同文件中。此外,我无法在多个对等级应用程序之间共享连接字符串定义。

  2. 为 web.config 中的连接字符串指定一个 configSource="DeveloperLocalConnectionStrings.config" 值,然后 XDT 将此值转换为指向我的代码库中的多个特定于环境的文件之一。我的问题是我将所有环境的密码发送到所有目的地(当然,除了 SVN),并且在服务器上等待意外使用的未使用的配置部分。

  3. machine.config 文件中的特定连接字符串,而不是 web.config。问题:谁希望在 machine.config 中找到连接字符串,结果出现意外名称冲突的可能性很高。

  4. 指定 configSource="LocalConnectionStrings.config",不要转换值,并编辑项目 xml 以排除连接字符串配置的部署。http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment- 这是我找到的解决我对专有(非分布式)Web 应用程序需求的最佳解决方案,但我很怀疑另一位团队成员有一天会出于某种原因复制生产站点进行测试,瞧!现在正在 UAT 期间修改生产数据库。(更新:我发现在这种情况下我不能使用一键发布,只能使用带有 -skip 参数的 msdeploy 命令行。如上排除文件与将其设置为“无”编译操作而不是“内容”,并导致包将其从部署目标中删除。)

  5. 如果尚未设置连接字符串,请将部署包连接起来以提示输入连接字符串(我还不知道如何执行此操作,但我知道这是可能的)。这将产生与上述#4 类似的结果。

  6. 指定 configSource=".​​.\ConnectionStrings.config"。非常适合我的需求,因为我可以在我选择的应用程序之间共享配置,并且我的应用程序目录中不会有任何特定于机器的内容。不幸的是,此属性中不允许使用父路径(就像它们用于 'appSettings file=""' - 另请注意,您可以在 configSource= 参考中大量使用 file=)。

ps 这里讨论了其中一些解决方案:ASP.Net 配置文件 -> 多个开发人员和部署服务器的连接字符串

4

3 回答 3

3

使用 SQL Server 时,还可以使用 Integrated Security / SSPI 并将 WebServer 计算机登录添加到 Sql Server。

这样您就不必在 web.config 中公开任何内容,并且可以像授予任何其他 DB 用户一样向该登录名授予角色。

尽管您必须了解要采取的含义和安全注意事项,因为作为该机器执行的任何恶意代码都可以访问 Sql Server。

关于奥莱

于 2010-10-19T10:33:50.193 回答
1
  1. 使用主机名作为连接字符串的键,这样您就可以自动选择数据源。确保选择例程没有错误(更改主机名 - 测试!)...

  2. 不要放在web.config里,写个ini文件,这样就没有XML编码了。

  3. 使用私钥/公钥 (RSA/PGP) 加密其中的密码。永远不要使用明文或对称密钥,这同样糟糕。

于 2010-10-15T07:44:31.010 回答
0

查看我的以下博客文章:保护 asp.net 机器密钥和连接字符串

如果您确实使用 Quandary 的答案,请使用不在站点文件夹中的密钥,就像 asp.net 使用受保护的配置部分一样。

我们手动批准对进入暂存/生产的 web.config 的更改。我们尽可能使用集成而不是基于用户名,但我们在后一种情况下使用的一个选项是在 SVN 中只使用用户名/密码的占位符。

过去我们使用过单独的配置文件,但我们在修改 web.config 时遇到了其他类型的问题,因此我们最近将其锁定在一个文件中。

于 2010-10-15T14:18:58.687 回答