ASP.NET MVC 4 - 我应该如何加密生产SQL服务器的连接字符串?

akn*_*ds1 9 deployment encryption asp.net-mvc asp.net-mvc-4 azure-sql-database

我有一个ASP.NET MVC 4项目,它将部署到Azure进行生产,在生产中我使用SQL Azure数据库.我的问题是我只想在生产部署中连接到SQL Azure数据库,而不是在开发时,并且应该加密SQL Azure连接字符串.

现在,我可以通过Web.config转换解决第一个要求,以便在部署到Azure时替换数据库连接字符串.但是,我没有看到如何将其与连接字符串加密相结合?如何在部署时加密SQL Azure连接字符串并将其替换为开发连接字符串?这种情况的最佳做法将是最受欢迎的:)

akn*_*ds1 7

我认为一个好的解决方案是将生产<connectionStrings>部分键入Web.config并对其进行加密,然后将加密的<connectionStrings>部分移动到转换文件(例如Web.Release.config)并对其进行注释,以便<connectionStrings>在转换时替换整个部分. .这实现了使用也加密的生产连接字符串部署Web.config的目标.

我一直遵循"保护您的连接字符串中的Windows Azure"的指导,部分1,2,34,以了解如何Web.config中进行加密.我建议完全参考,其他人也这样做.我将概述为解决我的问题而执行的主要步骤.

<connectionStrings>使用生产设置更新Web.config中的部分后,我安装了Pkcs12受保护的配置提供程序并运行aspnet_regiis.exe来加密该部分(在Visual Studio命令提示符中,位于项目目录中):

aspnet_regiis -pef "connectionStrings" "." -prov "CustomProvider"
Run Code Online (Sandbox Code Playgroud)

我还添加了CustomProviderWeb.config 的定义:

<configProtectedData>
  <providers>
    <add name="CustomProvider" thumbprint="<your thumbprint here>"
       type="Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider, PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d"/>
  </providers>
</configProtectedData>
Run Code Online (Sandbox Code Playgroud)

然后我将加密的<connectionStrings>部分移动到Web.Release.config(用于在部署到Azure时转换Web.config),并注释该部分,以便它替换Web.config中的相应部分:

connectionStrings configProtectionProvider="CustomProvider" xdt:Transform="Replace">
...
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

最后,我恢复了<connectionStrings>Web.config中的开发部分.我已经测试了这个解决方案,发现部署的Web.config包含加密<connectionStrings>部分,就像我之前一样.