日期:2012-08-20  浏览次数:21097 次

同样是一个常见问题,尤其在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 Assignme