更新:2007 年 11 月
使用数据源控件时,在应用程序的 Web.config 文件中放置控件时应使连接字符串的位置集中。这样做有两个好处:数据源控件可以从配置文件中引用连接字符串的名称,而不是包括连接字符串作为控件属性;由于连接字符串的管理集中进行,在连接字符串信息更改时无需重新访问各页,因此更易于管理站点。
在本主题中,您将了解如何使用 Visual Studio 和数据源控件在 Web.config 文件中放置连接字符串,以及如何使用命令行实用工具 Aspnet_regiis.exe 加密连接字符串以额外提供一层安全保护。
如何使用数据源控件向 Web.config 中添加连接字符串
- 在 Visual Studio 的**“设计”**视图中打开一个 .aspx 页。 
- 从**“工具箱”的“数据”**文件夹中,将一个数据源控件(如 SqlDataSource 控件)拖动到设计图面上。 
- 右击该控件,然后单击**“显示智能标记”**。 
- 在智能标记面板中,单击**“配置数据源”**。 
- 在**“选择数据连接”面板中,单击“新建连接”**。 
- 从**“选择数据源”对话框的列表中选择适当的数据源,然后单击“确定”**。 
- 在**“添加连接”对话框中指示正确的服务器名、用户名和密码,然后单击“确定”**。 - 此时,您将返回到**“配置数据源”**对话框,其中提供了连接详细信息的摘要。 
- 单击**“下一步”,然后单击“是”**以在 Web.config 文件中保存连接字符串。 - 连接字符串即存储在 Web.config 文件中,现在可以为控件配置查询详细信息。 
加密 Web.config 文件中存储的连接字符串信息
- 在 Windows 命令行,使用以下选项运行 ASP.NET IIS 注册工具 (Aspnet_regiis.exe): - -pe 选项,向其传递字符串 "connectionStrings" 以加密 connectionStrings 元素。 
- -app 选项,向其传递应用程序的名称。 
 - Aspnet_regiis.exe 工具位于 %systemroot%\Microsoft.NET\Framework\版本号 文件夹中。 - 下面的代码示例演示如何为名为 SampleApplication 的应用程序加密 Web.config 文件的 connectionStrings 节。 - aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"- 当该命令完成时,可以查看 Web.config 文件的内容。connectionStrings 配置节将包含加密信息而不是明文形式的连接字符串,如下面的代码示例中所示。 - <configuration> <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings> </configuration>- 保持命令提示打开,以用于后续步骤。 
- 通过检索当前的 WindowsIdentity 名称来确定用户帐户或标识 ASP.NET 运行所用的帐户。 - 下面的代码示例演示一种确定 WindowsIdentity 名称的方式。 - <%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>- <%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>.gif) 说明: 说明:- 默认情况下,在 Windows Server 2003 中,在 Web.config 文件中禁用 ASP.NET 应用程序的模拟时,应用程序运行所用的标识为 NETWORK SERVICE 帐户。在其他 Windows 版本中,ASP.NET 使用本地 ASPNET 帐户运行。 - 运行 ASP.NET 所用的用户帐户或标识必须对用于加密和解密 Web.config 文件各节的加密密钥具有读取权限。本过程假定您的网站使用 Machine.config 文件中的名为“RsaProtectedConfigurationProvider”的默认 RsaProtectedConfigurationProvider 进行了配置。默认 RsaProtectedConfigurationProvider 使用的 RSA 密钥容器名为“NetFrameworkConfigurationKey”。 
- 在命令提示处,使用以下选项运行 Aspnet_regiis.exe 工具: - -pa 选项,向其传递默认 RsaProtectedConfigurationProvider 的 RSA 密钥容器的名称。 
- 在前一步中确定的 ASP.Net 应用程序的标识。 
 - 下面的代码示例演示如何授予 NETWORK SERVICE 帐户对计算机级别的“NetFrameworkConfigurationKey”RSA 密钥容器的访问权限。 - aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
- 若要解密已加密的 Web.config 文件内容,请使用 -pd 选项运行 aspnet_regiis.exe 工具。语法与使用 -pe 选项加密 Web.config 文件的语法相同,区别在于无需指定受保护的配置提供程序。相应的提供程序在受保护节的 configProtectionProvider 属性中标识。 - 下面的代码示例演示如何解密 ASP.NET 应用程序 SampleApplication 的 connectionStrings 元素。 - aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"