加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之七十一:保护连接字符串及其它设置信

发布时间:2016-11-22 11:41:00 所属栏目:MsSql教程 来源:站长网
导读:导言: ASP.NET应用程序的设置信息通常都存储在一个名为Web.config的XML文件里。在教程的前面部分我们已经好几次修改过Web.config文件了.比如在第一章,我们创建名为Northwind的数据集时,数据库连接字符串信息自动的添加到Web.config文件的connectionStri

/uploads/allimg/c161121/14OI95J34S0-1O5c6.png
图4:点击“Encrypt Connection Strings”按钮对<connectionString>节点进行加密

在加密前,我暂时地将<CipherData>元素里的内容转移了:

<connectionStrings
 configProtectionProvider="DataProtectionConfigurationProvider">
 <EncryptedData>
 <CipherData>
 <CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</CipherValue>
 </CipherData>
 </EncryptedData>
</connectionStrings>

  注意:<connectionStrings>元素指定了用来加密的provider(即DataProtectionConfigurationProvider).当点击“Decrypt Connection Strings”按钮时UnprotectSection方法将会用到该信息.对于加密的连接字符串,系统可以自动的对其解密.简而言之,我们不需要再对加密的<connectionString>节点添加任何其它的代码。我们来做个验证,打开以前的教程,比如(~/BasicReporting/SimpleDisplay.aspx页面),如图5所示,页面像我们期望的那样工作正常,这就表明了经过加密的连接字符串被ASP.NET页面自动解密了.

/uploads/allimg/c161121/14OI95J5CP-1P4C4.png
图5:数据访问层自动解密连接字符串信息

  为将加密的<connectionStrings>节点恢复到纯文本样式,点击“Decrypt Connection Strings”按钮。页面回传后,你将看到Web.config文件里的连接字符串恢复到纯文本样式.此时,屏幕开起来像是最初登录的样子(见图3)

第三步:用aspnet_regiis.exe对配置节点进行加密

  .NET Framework包含了很多的命令行工具,可以在$WINDOWS$/Microsoft.NET/Framework/version/ folder文件夹里找到这些工具.以第59章《使用SQL缓存依赖项SqlCacheDependency 》为例,我们用aspnet_regsql.exe命令行工具为SQL缓存依赖添加里必要的体系结构.该文件夹里的另一个有用的工具是ASP.NET IIS Registration tool (aspnet_regiis.exe). 就像其名字暗示的那样,这个ASP.NET IIS Registration工具主要用来在微软专业Web server,IIS上注册ASP.NET 2.0应用程序.

  除了其与IIS相关的属性外,该ASP.NET IIS Registration工具也可以对Web.config文件的配置节点进行加密和解密. 下面的是使用aspnet_regiis.exe命令行工具对配置节点加密的常规代码:

aspnet_regiis.exe -pef section physical_directory -prov provider

  其中section是要加密的配置节点(比如“connectionStrings”);physical_directory 为web应用程序根节点的完整物理路径;provider是用到的protected configuration provider的名称(比如“DataProtectionConfigurationProvider”). 另外,如果你将web应用程序在IIS里进行了注册了的话,你就可以用相当路径来代替绝对路径:

aspnet_regiis.exe -pe section -app virtual_directory -prov provider

  下面为使用aspnet_regiis.exe的例子,它用DPAPI provider,机器级密匙,对<connectionStrings>节点进行加密:

aspnet_regiis.exe -pef
"connectionStrings" "C:/Websites/ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"

  类似的,该aspnet_regiis.exe命令行工具也可以用来解密配置节点,不过我们要将-pef替换成-pdf或-pd。当然,解密时不需要指定provider名称.

aspnet_regiis.exe -pdf section physical_directory
 -- or --
aspnet_regiis.exe -pd section -app virtual_directory

  注意:由于我们使用的是DPAPI provider,它使用的密匙是又电脑指定的,所以你必须在存储web页面的同一台电脑上运行aspnet_regiis.exe工具. 比如,你在本地电脑上运行这个命令行,然后又将加了密的连接字符串上载到另一个服务器上,该服务器就无法对其进行解密,因为加密的密匙是在本地电脑上指定的.如果是使用RSA provider的话就不存在这种局限性,因为RSA provider可以将密匙(RSA keys)传递给另一台电脑.

理解Database Authentication Options

  在任何应用程序向Microsoft SQL Server数据库发出SELECT,INSERT,UPDATE,或DELETE请求之前,数据库首先要确定请求者的身份.该过程可分为2种验证模式:authentication 和 SQL Server provides:

.Windows Authentication:在Visual Studio 2005的ASP.NET Development Server里运行一个ASP.NET应用程序时,ASP.NET应用程序假定身份(identity)为当前登录用户。而如果运行在Microsoft Internet Information Server (IIS)上的话,ASP.NET应用程序假定身份(identity)为domainName/MachineName or domainName/NETWORK SERVICE,,虽然这些都可以用户定制.

.SQL Authentication:验证的时候需要提供用户ID和password,使用SQL authentication的话,可以由连接字符串来提供ID和password.

  一般使用Windows authentication模式,因为其更安全.在Windows authentication模式下,连接字符串不需要用户名和密码,并且如果web服务器和数据库服务器分属不同的电脑的话,(credentials)认证在网络间传输时并不以纯文本格式传输.而如果是SQL authentication模式的话,将对连接字符串进行硬编码,且认证在web服务器和数据库服务器之间以纯文本格式进行传输.

  本教程使用的是Windows authentication.我们可以通过连接字符串来查看到底使用的是哪种认证。本教程的Web.config文件的连接字符串如下:

Data Source=./SQLEXPRESS; AttachDbFilename=|DataDirectory|/NORTHWND.MDF; Integrated Security=True; User Instance=True

  术语“Integrated Security=True”,以及缺少用户名和密码都表明我们使用的是Windows authentication模式。不过在一些连接字符串里用术语“Trusted Connection=Yes” 或 “Integrated Security=SSPI”来替换“Integrated Security=True”, 不过它们都表明使用的是Windows authentication.

下面的代码显示使用的是SQL authentication:

Server=serverName; Database=Northwind; uid=userID; pwd=password

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读