[from MSDN]
在处理数据源控件时,建议您将连接字符串集中存储在应用程序的 Web.config 文件中。这会使连接字符串可供一个 Web 应用程序中的所有 ASP.NET 页使用,从而简化了连接字符串的管理。另外一个优势是,当连接字符串信息发生更改时,无需修改许多页。最后,您可以使用受保护配置对 Web.config 文件的连接字符串节进行加密,从而提高存储在连接字符串中的敏感信息(如数据库名称、用户名、密码等)的安全性。
本主题描述如何将连接字符串存储在 Web.config 文件的connectionStrings配置节,以及如何使用命令行 .NET Framework 工具来加密连接字符串以实现额外的安全性。
将连接字符串存储在 Web.config 文件中
打开应用程序的 Web.config 文件。如果 Web.config 文件尚不存在,请创建一个名为 Web.config 的文本文件并添加以下内容:
<?xml version="1.0"?>
<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<system.web>
</system.web>
</configuration>在 configuration 元素中,创建一个名为 connectionStrings 的新元素,如下面的示例所示:
<?xml version="1.0"?>
<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings> </connectionStrings>
<appSettings/>
<system.web>
</system.web>
</configuration>在 connectionStrings 元素中,针对将用在 Web 应用程序中的每个连接字符串创建一个 add 元素。将包括下表所示的属性。
属性 说明 name
此连接字符串配置对象的名称。此名称将由数据源控件和其他功能用来引用连接字符串信息。
connectionString
数据源的连接字符串。
providerName
要用于此连接的 NET Framework 数据提供程序的命名空间,如 System.Data.SqlClient、System.Data.OleDb 或 System.Data.Odbc。
一个完整的 connectionStrings 元素可能如下面的示例所示:
<connectionStrings>
<add
name="NorthwindConnection"
connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
</connectionStrings>保存并关闭 Web.config 文件。
现在,可以通过引用为 name 属性指定的名称来引用数据源控件的连接字符串。
在数据源控件的 ConnectionString 属性中,使用连接字符串表达式语法引用 Web.config 文件中的连接信息。
下面的示例演示 SqlDataSource 控件,该控件读取 Web.config 文件中的连接字符串:
<asp:SqlDataSource ID="ProductsDataSource" Runat="server"
SelectCommand="SELECT * from Products"
ConnectionString="<%$ ConnectionStrings: NorthwindConnection %>"
</asp:SqlDataSource>
对存储在 Web.config 文件中的连接字符串信息进行加密
在 Windows 命令行下运行带有下列选项的 ASP.NET IIS 注册工具 (aspnet_regiis.exe):
-pe 选项,向它传递字符串"connectionStrings"以加密 connectionStrings 元素。
-app 选项,向它传递应用程序的名称。
aspnet_regiis.exe 工具位于 %systemroot%\Microsoft.NET\Framework\versionNumber 文件夹中。
下面的示例演示如何对名为 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="C#" %>
<%
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
%>注意 默认情况下,在 Windows Server 2003 上,由于 Web.config 文件中禁用了对 ASP.NET 应用程序的模拟,应用程序运行所使用的标识是 NETWORK SERVICE 帐户。在其他版本的 Windows 上,ASP.NET 运行在本地 ASPNET 帐户下。
ASP.NET 运行所使用的用户帐户或标识必须对用来加密和解密 Web.config 文件各节的加密密钥具有读取权限。此过程假定对网站配置了在 Machine.config 文件中指定的名为"RsaProtectedConfigurationProvider"的默认 RsaProtectedConfigurationProvider。默认 RsaProtectedConfigurationProvider 使用名为"NetFrameworkConfigurationKey"的 RSA 密钥容器。
在命令提示符下,运行带有下列选项的 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"

No comments:
Post a Comment