疑难解答常见权限和 ASP.NET 中安全相关问题

文章翻译 文章翻译
文章编号: 910449 - 查看本文应用于的产品
ASP.NET 支持语音列

疑难解答常见权限和 Microsoft ASP.NET 中安全相关问题

要自定义该列, 您需要我们希望邀请您要提交有关主题感兴趣和问题, 要查看您的想法解决将来知识库文章和支持语音列。 您可以提交您的意见和使用 Ask For It 表单。 也有的窗体底部该列的链接。
展开全部 | 关闭全部

本文内容

这是来自 ASP.NET 小组 Vignesh A.G hello, 欢迎使用 ASP.NET 支持语音列 ! 我已被开发支持工程师了超过两年现在在 Microsoft, 和我有花费我时间重点 ASP.NET 和 Microsoft Internet Information Services (IIS)。

该列的焦点不会对解释 ASP.NET 安全性, 但对大纲一些疑难解答技巧和提示可以帮助您隔离和解决一部分常见权限和安全方案, 我们这里看 PSS。 ASP.NET 中权限和安全相关问题非常记录。 事实上, 都会好人数用户可能具有运行到同一问题之前给您。 因此, 目的是为该列可适于以找到有关 ASP.NET 安全性相关和详尽信息。 没有不好感觉比自己解决问题。

有用工具

尝试修复任何是断开之前, 您需要熟悉一些工具将帮助您缩小问题。 在本例, 我们可能会感兴趣像 FileMon 和 RegMon, 安全审核工具。 有关 FileMon, 请访问 Microsoft Web 站点:
http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx
有关 RegMon, 请访问 Microsoft Web 站点:
http://technet.microsoft.com/en-us/sysinternals/bb963881.aspx

深化来隔离问题

  • 以往一直应用程序 ? 然后如果 yes, 哪些更改, 可能有进行应用符 ? 很可能在服务器上应用软件更新或安全更新。 代码展示还可能导致问题。
  • 执行简单 .html, .asp 页提供从 IIS ?
  • 是否应用程序迁移到不同版本的 IIS ?
  • 有其他 ASP.NET 应用程序服务器失败, 出现相同错误上 ? 是否仅应用程序失败 ?
  • 对于所有用户或对只有特定用户不出现问题 ?
  • 该问题可重现本地 Web 服务器, 上浏览时或为少数客户只是可重现 ?
  • 如果使用模拟, 则不模拟用户拥有对资源需要访问 ?
上述问题中顺序对诊断问题很有用。 如果任何是 ASP.NET 论坛, 上投递问题并且已经对大部分, 这些问题的解答然后您将获得针对您问题快速指针或解决方案的。 关键是要发布整个 ASP.NET 堆栈跟踪错误, 如果适用, 代替说 " 我试图运行 ASP.NET 应用程序时收到拒绝访问错误。 任何有助于 ? " 很更便于他人看堆栈跟踪并提供它们可看到完整错误消息时指针。 因此, 需要问自己 ……

什么是确切的错误消息 ?

第一个问题我们询问客户是 " 什么是确切的错误消息 ? ", 跳如果有清除由 Microsoft NET Framework, 引发错误信息的说明您可过本节。 如果您应用屏蔽实际错误消息并提供友好错误消息而, 如, " 一个意外错误。 有关详细信息, 请与网站管理员联系 " 是不是任何多用于。 下面是几个步骤将帮助您获取实际错误消息。
  • 找到和应用目录中打开 Web.config 文件并 customErrors 更改到模式 = " Off " = " Off "。 保存文件, 并重现该问题。
  • 它仍不能查看实际错误消息因通过应用程序开发自定义事件 / 错误处理按照上述步骤后。 您可以尝试在 Global.asax 文件和注释出任何代码, 使用 Server.Transfer("Errors.aspx") 函数来转到自定义错误页中找到 _ Error 事件。
/Global.asax 
void Application_Error(object sender, EventArgs e) 
 {
  // Code that runs when an unhandled error occurs
  //Server.Transfer("Errors.aspx"); 

  } 
一旦收到实际错误信息, 读取它以确定是否通过缺少权限在本地资源或与 ASP.NET 应用程序试图访问远程资源上引起错误。

提示 您可与您开发人员了解如何查看实际错误消息。 很可能您开发可能是其记录到文件或获取电子邮件通知。 始终记住要对任何文件, 您不想更改进行备份。 与备份可用, 您可以始终回滚更改。

问题出现的原因是缺少对本地资源, ASP.NET 应用程序试图访问权限

如果您不能获得的自定义错误消息, 因为清除的问题说明运行 FileMon 并重现该问题。 停止并作为 FileMon.xls 保存捕获和 MicrosoftExcel 中打开文件。 数据 菜单, 中 筛选 , 依次 AutoFilter 用于 Excel 的筛选功能。 现在列 F 中选择下拉列表然后寻找 " ACCESSDENIED " 错误。

如下示例 FileMon 输出。
10381 1:01:11 PM w3wp.exe:2320 OPEN
				C:\winnt\microsoft.net\framework\v1.1.4322\Temporary ASP.NET
				Files\sessiontest\8832e585\275ec327\global.asax.xml ACCESS DENIED NT
				AUTHORITY\NETWORK SERVICE
正如您从筛选结果, 看到我们有故障导致问题的原因。 FileMon 显示 NT AUTHORITY\NETWORK SERVICE 帐户缺少 C:\Winnt\Microsoft.net\Framework\v1.1.4322\Temporary ASP.NET 文件夹上 NTFS 权限。 要解决这应该直接转发。 有关使用 FileMon 来解决 ASP.NET, 请单击下列文章编号以查看 Microsoft 知识库中相应:
890960 ASP.NET 使用 FileMon 疑难解答
提示 A 好步骤会 ASP.NET 进程帐户改为管理员帐户, 看它修复问题。 IIS 5 中不会更改 userName 以 " SYSTEM " 流程模型部分中的 machine.config 文件, IIS 6.0 中将更改 IIS AppPool 标识为 " 本地系统 " 以查看是否工作应用程序。

注意 这不能使用作为解决方案, 而仅作为疑难解答步骤。

大多数人会倾向于重新安装 Microsoft NET Framework 或甚至转到程度重新安装操作系统。 这是不推荐疑难解答步骤并不保证, 将不出现问题。 我将提供一个例子。 间歇性问题经常是难以隔离和解决。 此方案中客户应用程序将用于或几小时, 正常并且所有对 sudden 然后它将失败, 错误下面。 客户具有已尝试重新安装 .NET 框架以及操作系统。 这似乎要解决该问题在几天, 但然后它 reappeared。

收起这个图片展开这个图片
Server Error in '/MyApp'
				Application


运行 FileMon 做不显示任何 ACCESSDENIED 错误。 所有必要的权限为 ASPNET 帐户是位置中。 要从问题恢复唯一方法是重新引导框。 即使一个 IIS 复位不能够帮助。 您正考虑 " 总是需要重新启动才能恢复 ? " Ah、 Microsoft 软件 您也, 是错误 !

此处关键在于仔细查看错误消息。 明确指出 " 无法打开文件进行写入, " 错误和不正常 ACCESSDENIED 错误, 以便我正在考虑它是某些其他进程持有锁对文件或文件夹并不允许 ASP.NET 写入到它。 其他进程已取消重新启动并开始直到再次恶意进程锁定文件再次处理 ASP.NET 应用程序有意义的。 逻辑操作进行会要关闭所有防病毒程序、 第三方 spyware 或监视服务器上运行软件任何其他文件。 我不想指出特定第三方软件。 但, 防病毒软件通常, 已知会导致大量 grief 用于 IIS 和 ASP.NET 应用程序。 其他已知问题由防病毒软件是会话是触及 Bin 文件夹或 .config 文件时丢失因受到 AppDomain 回收。

提示 要关闭第三方服务: 简单方法是到:
  1. 单击 开始 , 单击 运行 , 然后键入 msconfig.
  2. 选择 服务 并检查 隐藏所有 Microsoft 服务 。
  3. 单击 禁用所有 以停止第三方服务。
  4. 单击 开始 , 单击 运行 , 然后键入 iisreset 重新加载到辅助进程 CLR。
监视应用程序以查看如果再次出现问题。 如果您运行多个防病毒软件, 使用和错误 trial - - 方法确定特定程序导致了问题。

注意 如果相同错误是可重现 100% 的时间, 防病毒软件不可能原因。 可能有其他原因有关此错误。 尝试创建简单测试 ASP.NET 应用程序以隔离是否为 Test.aspx 页相同错误发生。 如果存在, 然后验证是否所有就地对 ASP.NET 需要访问控制列表 (ACL)。

请参阅 ASP.NET 必需访问控制列表 (ACL): http://msdn2.microsoft.com/en-us/library/kwzs111e.aspx

提示 : %SystemRoot%\Assembly 文件夹是全局程序集缓存。 无法直接使用 WindowsExplorer 来编辑 ACL 对该文件夹。 相反, 使用命令提示符并运行以下命令:
cacls %windir%\assembly / e / t / p domain\useraccount:r
使用以下命令授予权限通过 GUI 或者, 在使用 WindowsExplorer, 之前注销 Shfusion.dll:
C:\WINDOWS\Microsoft.NET\Framework\ VersionNumber > regsvr32?u shfusion.dll
使用以下命令设置权限具有 WindowsExplorer, 后注册 Shfusion.dll:
C:\WINDOWS\Microsoft.NET\Framework\ VersionNumber > regsvr shfusion.dll

问题出现的原因是缺少与 ASP.NET 应用程序试图访问远程资源上权限

当 ASP.NET 应用程序是访问远程资源 (如 MicrosoftSQLServer 或通用命名约定 (UNC) 共享, 有许多事情, 可以转错误。 还, 许多事情可能正确设置对远程资源。 您将需要解决这些问题以获得资源工作。 有关详细信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
891031 从 ASP.NET 应用程序访问远程资源时常见安全问题
第一步是要查看能否连接到远程服务器通过 WindowsExplorer。
  1. 远程服务器上创建名为 Test 文件夹。 在 共享 和 安全 选项卡的目标 Test 文件夹, 添加您域 / 帐户, 和也由 ASP.NET 应用程序, 使用进程帐户并赋予它们两个完全控制。

    注意 请参阅891031 对于方法或变通来从 ASP.NET 访问远程资源。
  2. 在 IIS 服务器, 用您的域 / 帐户登录, 单击 开始 , 单击 运行 , 然后键入远程服务器的 UNC 共享路径:
    \\RemoteServerName\Test
    如果您不能进入该文件夹, 然后与您的网络管理员联系以解决此问题。 然后只 ASP.NET 应用程序访问共享。
  3. 创建使用以下代码调用 CreateUNCFile.aspx 文件并应用程序目录中保存文件。
    <%@ Page Language="vb" %>
    <%@ Import Namespace="System.IO" %>
    <html>
      <head>
      <title>Writing to a Text File</title>
    <script runat="server">
        Sub WriteToFile(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim fp As StreamWriter
                fp = File.CreateText("\\<RemoteServerName>\Test\" & "test.txt")
                fp.WriteLine(txtMyFile.Text)
                lblStatus.Text = "The File Successfully created! Your ASP.NET process is able to access this remote share"
                fp.Close()
        End Sub
    </script>
    
    </head>
    <body style="font: 10pt verdana">
                <h3 align="center">Creating a Text File in ASP.NET</h3>
        <form id="Form1" method="post" runat="server">
                            Type your text:
                            <asp:TextBox ID="txtMyFile" TextMode="MultiLine" Rows="10" Columns="60" Runat="server" /><br>
                            <asp:button ID="btnSubmit" Text="Create File" OnClick="WriteToFile" Runat="server" />
                            <asp:Label ID="lblStatus" Font-Bold="True" ForeColor="#ff0000" Runat="server" />
        </form>
    </body>
    </html> 
    
  4. 确保您在下面的代码行修改 < RemoteServerName >
    fp = File.CreateText("\\<RemoteServerName>\Test\" &	"test.txt")
    以便反映的远程服务器名称。
  5. 打开 Windows InternetExplorer 并浏览到 http:// IISServerName / AppName /CreateUNCFile.aspx 从客户机非 IIS 服务器。
  6. 如果成功, Test.txt 文件创建进行身份然后 ASP.NET 应用程序可验证到远程资源。
  7. 然后如果从 IIS 服务器本身, 浏览到同一页从某个 InternetExplorer 客户端浏览器但工作文件创建失败则很可能您正在运行到 " Double " Hop 方案。 如果使用自定义生成 Web 部件来访问远程资源要求用户验证和授权, 您将可能遇到 " 双跃点 " 问题。 为了访问远程资源, 您需要提供最终用户的凭据与资源以便输出从资源仅限于, 最终用户有权访问数据。
上述步骤假定您有 IIS 中打开 NTLM 验证。 基本验证不使用 Kerberos。 有关详细信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
907272 Kerberos 验证和解决委派问题
326985 如何解决 IIS 中 Kerberos 相关的问题
有关 IIS 验证方法, 上详细信息请参阅以下 Microsoft Developer Network (MSDN) Web 站点
http://msdn2.microsoft.com/en-us/library/aa292114(VS.71).aspx


提示 如果能够连接到远程 UNC 共享但您无法连接到运行 SQLServer 从 ASP.NET 应用程序, 远程服务器然后您可能需要检查或设置用于 SQLServer 服务主体名称 (SPN)。 尝试启用仅基本验证在 IIS 中为应用程序并查看您是否能够连接到运行 SQLServer 远程服务器。 有关详细信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
319723 如何在 SQLServer 中使用 Kerberos 验证
316989 创建从 ASP.NET 信任数据连接到 SQLServer 时出现错误信息: " " 用户登录失败 ' AccountName ':
提示 是从不建议用以由于驱动器映射的扩展 netuse 命令和每用户基础上创建连接到远程资源映射驱动器。 为使用后面 UNC 共享访问对于远程计算机上存在 Web 服务器内容的首选方法。 有关详细信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
257174 IIS 使用映射驱动器

代码访问安全性 (CAS) 相关问题

ASP.NET 中的错误消息详细, 更经常超过不, 告诉您完全问题是什么。 在某些情况下, FileMon 或 RegMon 可能没有捕获任何有用。 让我们看一看这一情形。

方案

试图浏览, ASP.NET 应用程序时出现一般错误如以下 infamous 错误失败:
收起这个图片展开这个图片
Server Application
				Unavailable
事件日志显示:
事件类型: 错误
事件源: ASP.NET 1.1.4322.0
事件类别: 无
事件 ID: 1088
2006 日期: 10 / 11 /
时间: 10:54:04 PM
用户: N/A
计算机 ComputerName:
说明:
未能执行请求由于 App - 域可能不能创建。 错误: 0x8013150a
ASP.NET 应用程序域创建, 时 ASP.NET 读取为是信任配置元素, 级别属性指定值具有指定 级别 属性, 创建的 AspNetHostingPermission 类的实例, 然后将类添加到权限集应用程序域。 如果信任级别被正确配置或修改您会看到上述错误。 有关详细信息, 请参阅 " ASP.NET 信任级别和策略文件 " 在以下 MSDNWeb 站点:
http://msdn2.microsoft.com/en-us/library/wyts434y.aspx
要解决此问题, 您可以尝试此 提示 在 " 问题出现的原因是缺少对本地资源, ASP.NET 应用程序试图访问权限 " 部分, 但得不到 disheartened 如果应用程序使用 Administrator 或 SYSTEM 帐户无效。 您需要检查, 查看如果由代码访问安全性可能导致问题。 这可以轻松关闭代码访问安全通过使用 Caspol.exe 实用程序。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 > caspol - s 关闭
Microsoft (R) .NET 框架 CasPol 1.1.4322.573
版权所有 (C) Microsoft Corporation 1998 -2002。 保留所有权利。.

成功

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 >
一旦您有运行 关闭 caspol ?s , 重置 IIS 并尝试浏览应用程序。 如果此步骤工作, 您需要检查为代码组设置权限。 您可以访问管理工具中发现的 Microsoft.NET 框架 VersionNumber 配置工具中代码组。

在此方案, 权限设置 为 My_Computer_Zone 代码组被设置为 Nothing 。 更改到 完全信任 解决问题

注意 要访问 My_Computer_Zone 代码组, 执行以下步骤:
  1. 在控制面板, 双击 管理工具 。
  2. 双击 Microsoft .NETFramework VersionNumber 配置.
  3. 双击 Runtime 安全策略 。
  4. 双击 计算机 。
  5. 双击 代码组 。
  6. 双击 All _ Code 。
  7. 双击 My_Computer_Zone 。
提示 记住要运行 caspol ?s 上 要打开 CAS 一旦有修复此问题。

有关详细信息, 请参阅 ASP.NET 代码访问安全性: http://msdn2.microsoft.com/en-us/library/87x8e4d1.aspx

有许多其他原因有关服务器不可用 " Application " 错误信息。 事件日志是您最好方法以获取详细有关您问题的原因。

IIS 相关的错误

IIS 日志是在是 IIS 身份相关错误情况非常有用。 当用户将通常看到下列常见情形是:
收起这个图片展开这个图片
You are not
				authorized to view this page
什么您需要查找是对于此特定错误状态和子状态代码。
10 12 2006 - - 22:47:28 W 3 SVC 1 65.52.22.58 3 5 65.52.18.230 GET /MyAPP/login.aspx - 80 MyDomain\UserID_91 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+InfoPath.1) 401
我们看到 401 与 sub-status 3, 表示由于到资源上 ACL " Unauthorized "。

这表明文件或文件夹上缺少 NTFS 权限。 即使对于文件, 您正在尝试访问, 权限是否正确可能发生此错误但默认权限和用户权限可能丢失其他 SYSTEM 和 IIS 夹上。 如果 IUSR _ ComputerName 帐户没有对 C:\Winnt\System32\Inetsrv 目录访问例如, 可能看到此错误。 有关 IIS 状态代码, 请单击下列文章编号以查看 Microsoft 知识库中相应:
318380 描述 MicrosoftInternet 信息服务 (IIS) 5.0 和 6.0 状态代码
812614 默认权限和用户权利有关 IIS 6.0
271071 如何设置 IIS 5.0 Web 服务器需要 NTFS 权限和用户权利
提示 Click 开始 , 单击 运行 , 然后键入 logfiles 要打开文件夹包含 IIS 日志。 或者, 属性页对于 IIS, 中您站点上单击 WebSiteName 选项卡, 然后在 活动日志格式 , 单击 属性 以查看日志文件目录和名称。

感兴趣此处事是 5 状态代码。 可使用 < A0 > nethelpmsg 命令来对此状态代码获取详细信息:
C:\Documents and: > net helpmsg 5
访问被拒绝。
我们尝试其他常见状态代码, 代码 50:
C:\Documents and: > net helpmsg 50
不支持请求。
以便您收到了错误的详细说明 提示 尽可能收到其他通用 infamous " 500 内部服务器错误 " 消息, 然后最好要禁用友好 HTTP 错误消息。 不要忘记来查看事件查看器如还可能包含详细信息。
有关如何禁用友好 HTTP 错误信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
294807 关闭 Internet Explorer 5 和 6 " 显示友好 HTTP 错误消息 " 功能在服务器端
其原理是用于所有登录信息以获取最详细手头问题上。

资源

有关详细信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
306590 ASP.NET 安全性概述
317012 在 ASP.NET 进程和请求标识
如何创建服务帐户对于 ASP.NET 2.0 应用程序
http://msdn2.microsoft.com/en-us/library/ms998297.aspx

ASP.NET 标识矩阵
http://msdn2.microsoft.com/en-us/library/aa302377.aspx

以前 ASP.NET 支持语音列
http://support.microsoft.com/aspnetpsvc
我希望这些简单方法是中帮助您解决安全和权限相关问题有用。 支持语音列是针对您记住 ! 通常, 随意用于 Ask For It 表单要提交意见对主题对想要查看地址在今后的专栏或知识库中。

属性

文章编号: 910449 - 最后修改: 2007年5月11日 - 修订: 1.4
这篇文章中的信息适用于:
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
关键字:?
kbhowto kbasp KB910449 KbMtzh kbmt
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。
点击这里察看该文章的英文版: 910449
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com