同样是一个常见问题,尤其在win2003下经常有人问起。
出现连接异常通常是由磁盘权限引起,系统默认asp.net帐户对于ntsf分区只具有最小特权,因此可能引起访问异常。解决办法是于系统中修正相应权限。
另:连接字符串中指定的独占访问方式也可能引起连接异常。此情况只需修正连接字符串即可。
如:
conx.connectionstring ="provider=microsoft.jet.oledb.4.0;password=;user id=admin;data source="+ server.mappath("data\\典雅假期.mdb")+";";
即可
附msdn关于创建自定义帐户来运行 asp.net的文章,方便了解安全部署asp.net项目。
———————————————————————————-
如何创建一个自定义帐户来运行 asp.net
microsoft corporation
目标
本模块用于:
• 创建一个具有足够权限正确运行 asp.net 应用程序的最小特权帐户。
• 配置 asp.net,使其使用自定义的最小权限帐户来运行。
适用于:
本模块适用于下列产品和技术:
• microsoft_ windows_ xp 或 windows 2000 server(带 service pack 3)以及更高版本的操作系统
• microsoft .net framework 版本 1.0(带 service pack 2)以及更高版本
• internet 信息服务 (iis) 5.0 或 6.0(仅当使用 iis 5.0 隔离模式时)
本模块的使用方法
要最大程度的利用本模块:
• 必须有开发 asp.net web 应用程序的经验并熟悉 machine.config 文件的用途和结构。
• 必须有使用 windows 管理工具创建和管理独立或基于域的 windows 用户帐户的经验。
• 阅读模块“asp.net security”。本模块将向您提供下列各项的详细信息:asp.net 安全性是如何工作的,asp.net 辅助进程标识对一个正在执行的应用程序的权限有哪些影响,以及如何使用模拟来轻松地向 web 应用程序的用户授予适当的权限级别。
摘要
默认情况下,每个 asp.net 辅助进程在名为 aspnet 的最小特权帐户的上下文中运行。如果 asp.net 应用程序部署在基于域的服务器上,或需要访问远程服务器上的资源,则可以通过配置 asp.net 以运行在不同帐户的上下文中来简化管理。
本模块描述了如何将 asp.net 配置为在自定义本地帐户或域帐户的上下文中运行,并描述了分配此帐户以使其正常工作的权限。
预备知识
在开始使用本模块之前,应了解以下内容:
asp.net 辅助进程标识
用于运行 asp.net 的默认帐户(在安装时创建)是一个最小特权的本地帐户,并在 machine.config 中以如下方式指定:
<processmodel enable="true" username="machine" password="autogenerate" />
此帐户在本地用户和组下标识为 aspnet ,并有一个在 local system authority (lsa) 中受到安全保护的强密码。
当您需要使用 asp.net 进程标识访问网络资源(如数据库)时,可以执行下列任一操作:
• 使用域帐户。
• 使用“镜像”本地帐户(即在两台计算机上用户名和密码匹配的帐户)。在计算机位于没有信任关系的不同域中时,或计算机由防火墙隔开而无法打开 ntlm 或 kerberos 身份验证所需的端口时,需要使用此方法。
最简单的方法是在 web 服务器上将 aspnet 帐户的密码改为一个已知的值,然后在目标计算机上用相同的密码创建一个名为 aspnet 的帐户。在 web 服务器上,必须首先更改本地用户和组中的 aspnet 帐户密码,然后替换 machine.config 中 <processmodel> 元素上的凭据。不应将纯文本密码存储在 machine.config 中,而应改用 aspnet_setreg.exe 将加密密码存储在注册表中。有关详细信息,请参阅模块 8“asp.net 安全性”。
<processmodel enable="true"
username="registry:hklm\software\yoursecureapp\processmodel\
aspnet_setreg,username"
password="registry:hklm\software\yoursecureapp\processmodel\
aspnet_setreg,password" . . ./>
可以使用本模块中提供的步骤创建一个最小特权的本地帐户。
模拟固定标识
通过在 web.config 中采用下列设置,您可以为特定的虚拟目录设置固定标识。使用 aspnet_setreg.exe 将加密凭据存储在注册表中。
<identity impersonate="true"
username="registry:hklm\software\yoursecureapp\
identity\aspnet_setreg,username"
password="registry:hklm\software\yoursecureapp\
identity\aspnet_setreg,password" />
如果在同一个 web 服务器上有多个 web 站点,而这些 web 站点需要以不同的身份运行,则通常使用此方法;例如,在应用程序宿主方案中就需要采用这种方法。
本模块了描述如何创建最小特权的本地帐户。如果您主要进行管理工作,则可以使用一个具有强密码的最小特权受限域帐户。
当考虑用于运行 asp.net 的帐户时,则请记住下列几点:
• 默认情况下,asp.net 不进行模拟。因此,web 应用程序所执行的任何资源访问都使用 asp.net 进程身份。在此情况下,windows 资源必须有一个向 asp.net 进程帐户授予访问权的访问控制列表 (acl)。
• 如果启用了模拟,则应用程序使用原始调用方的安全上下文来访问资源,或如果配置了 iis 进行匿名身份验证,则使用匿名 internet 用户帐户(默认情况下为 iusr_machine)。在此情况下,资源必须有基于原始调用方身份(或 iusr_machine)的 acl。
• 在创建自定义帐户时,应始终遵循最小特权原则 — 只提供最小限度的所需特权和权限。
• 避免使用 system 帐户运行 asp.net。
• 避免向此帐户授予“作为部分操作系统”的特权。
创建一个新的本地帐户
此过程创建一个新的本地帐户。默认情况下,这个新帐户将被添加到本地 users 组中。
要创建一个新的本地帐户,请执行下列操作:
1. 创建一个本地帐户(例如“customaspnet”)。
确保对此帐户使用强密码。强密码应至少包含七个字符,并采用大小写字母、数字和其他字符(如 *、? 或 $)的混合方式。
2. 清除 user must change password at next logon 选项。
3. 选择 password never expires 选项。
分配最小特权
此过程分配运行 asp.net 所需的一组最小的特权。
要分配最小特权,请执行下列操作:
1. 从 administrative tools 程序组中,启动 local security policy 工具。
2. 展开 local policies,然后选择 user rights assignment。
右窗格中会显示出一个特权列表。
3. 向新帐户分配下列特权:
• 从网络访问此计算机
• 作为批处理作业登录
• 作为服务登录
• 拒绝本地登录
• 拒绝通过终端服务登录
注意 要向帐户分配特权,请双击此特权,然后单击 add 来选择所需的帐户。
4. 关闭此工具。
分配 ntfs 权限
此过程在本地文件系统中向自定义的 asp.net 帐户授予所需的 ntfs 权限。
注意 此过程中的步骤适用于 web 服务器上的文件系统(而不适用于远程计算机上的文件系统,为了进行网络身份验证,可以在远程计算机上复制此帐户)。
要分配 ntfs 权限,请执行下列步骤:
• 启动 windows 资源管理器,并向表 1 中指定的文件夹分配适当的权限。
表 1 中提到的固定模拟帐户是指可以使用 web.config 中的 <identity> 元素有选择地配置的帐户,如下所示。
<identity impersonate="true"
username="registry:hklm\software\yoursecureapp\
identity\aspnet_setreg,username"
password="registry:hklm\software\yoursecureapp\
identity\aspnet_setreg,password" />
在本例中,aspnet_setreg.exe 已被用于以加密格式将自定义帐户凭据存储在注册表中。
表 1: 所需的 ntfs 权限
位置 所需权限 帐户 备注
临时 asp.net 文件:
c:\winnt\microsoft.net\framework\<version>\
临时 asp.net 文件 完全控制 process 和固定模拟帐户 这是 asp.net 的动态编译位置。在此文件夹下,为每个应用程序在离散目录中生成应用程序代码。
<compilation> 元素中的 tempdir 属性可以用于更改此默认位置。
临时文件夹:
c:\winnt\temp read/write/delete process web 服务用于生成序列化代理的位置。
注意,delete 权限使用 windows 资源管理器文件夹属性对话框的 security 页上的 advanced 按钮设置。
应用程序虚拟目录:
c:\inetpub\wwwroot\webapp1 read process web 应用程序文件的位置(即应用程序的虚拟根目录)。
默认情况下,用户组具有适当的访问权限。
安装 (%installroot) 层次结构:
(c:\winnt\microsoft.net\framework\v1.0.3705) read process和固定模拟帐户 asp.net 必须能够访问 .net framework 程序集。
默认情况下,用户组具有适当的访问权限。
全局程序集缓存:
c:\winnt\assembly read process 和固定模拟帐户 这是全局程序集缓存。不能直接使用 windows 资源管理器来编辑此文件夹的 acl。应改用一个命令窗口并运行下列命令:
cacls %windir%\assembly /e /t /p domain\useraccount:r
另外,在使用 windows 资源管理器前,用下列命令取消对 shfusion.dll 的注册:
regsvr32–u shfusion.dll
在用 windows 资源管理器设置权限后,用下列命令重新注册 shfusion.dll:
regsvr32 shfusion.dll
web 站点根目录:
c:\inetpub\wwwroot 或默认 web 站点指向的路径 read process asp.net 读取配置文件并监视此文件夹中的文件更改。
系统根目录:
c:\winnt\system32 read process 适用于 framework 加载的系统 dll。
应用程序文件夹层次结构
c:\
c:\inetpub\
c:\inetpub\wwwroot\
c:\inetpub\wwwroot\mywebapp1 list folder/read process 对于文件更改通知和 c# 编译器(为使文件规范化),procss 帐户需要应用程序文件夹层次结构的列表文件夹和读取数据权限。这是返回到根目录所经过的全部父文件夹。
配置 asp.net,从而使用新帐户来运行
此过程通过编辑 machine.config 来将 asp.net 配置为使用新帐户来运行。
要将 asp.net 配置为使用新帐户来运行,请执行下列步骤:
1. 在命令提示符下,运行 aspnet_setreg.exe 以将自定义帐户的用户名和密码的加密版本添加到注册表中。有关此实用工具的详细信息及其下载,请参阅 microsoft 知识库文章 329290“howto: use the asp.net utility to encrypt credentials and session state connection strings”,位于 : http://support.microsoft.com/default.aspx?scid=329290.
aspnet_setreg–k:software\yoursecureapp\processmodel
–u:"customaspnet"–p:"yourstrongpassword"
2. 使用 visual studio.net 或记事本打开 machine.config。
machine.config 位于下列文件夹中:
c:\winnt\microsoft.net\framework\v1.0.3705\config
3. 定位到 <processmodel> 元素并将 username 和 password 属性设置为包含下列指向加密凭据详细信息的字符串。
default:
<processmodel username="machine" password="autogenerate" . . ./>
becomes:
<processmodel
username="registry:hklm\software\yoursecureapp\processmodel\
aspnet_setreg,username"
password="registry:hklm\software\yoursecureapp\processmodel\
aspnet_setreg,password" . . . />
4. 将更改保存到 machine.config 中
