安全问题疑难解答

来源:互联网 发布:outlook数据存本地 编辑:程序博客网 时间:2024/05/16 02:21
发布日期: 10/14/2004 | 更新日期: 10/14/2004

安全问题疑难解答

pponline

浏览全部的安全性指导主题

Microsoft Corporation

*

在本章中

在分布式 Web 应用程序中,安全问题疑难解答是一个复杂而耗时的工作。由于相互间存在关联的部分非常之多 — 即使是在非常简单的 Web 应用程序中 — 没有有效的调查,通常也不可能区分哪一部分是产生问题的原因。有时,即使知道从哪里开始查找,这个问题也可能是一个令人望而生畏的工作。

本章介绍了一种经过证明的,分布式 Web 应用程序中的安全相关疑难问题的解答过程,并提供了一组可用来帮助诊断和解决这些问题的技术和工具。

返回页首返回页首

目标

使用本章:

在分布式 ASP.NET Web 应用程序中解决安全相关问题。

返回页首返回页首

适用于:

本章适用于下列产品和技术:

Microsoft® Windows® XP或Windows 2000 Server(安装了service pack 3)以及更高版本的操作系统。

Microsoft Internet 信息服务 (IIS) 5.0 版本及以上。

Microsoft Active Directory目录服务。

.NET Framework 1.0版本(安装有 service pack 2)及以上。

Microsoft SQL Server™2000(安装有 service pack 2)及更高版本。

返回页首返回页首

怎样使用本章

本章介绍了在分布式 ASP.NET Web 应用程序中调试安全相关问题时,您将会经常使用的信息。如果带着明确的问题阅读本章,您将会获得更大的收益。要从本章中获得最多的收益:

您必须具有使用 Microsoft Visual C#® .NET 开发工具和 Microsoft Visual Studio.NET 开发系统的经验。

您必须具有开发和配置 ASP.NET Web 应用程序的经验。

您必须具有配置 SQL Server 和 IIS 安全性的经验。

您必须具有配置 Windows 安全性,特别是 Kerberos 和 Active Directory 的经验。

您必须具有配置 Enterprise Services (COM+) 应用程序的经验。

阅读本指南前面与您所要解决的问题有关的的章节。前面的章节介绍了许多具体产品、技术和方法的细节信息,可以帮助您理解处理问题的方式。这将有助于您推断引起当前问题的原因。

本页内容
在本章中 在本章中 目标 目标 适用于: 适用于: 怎样使用本章 怎样使用本章 疑难解答过程 疑难解答过程 身份验证问题疑难解答 身份验证问题疑难解答 授权问题疑难解答 授权问题疑难解答 ASP.NET ASP.NET 确定标识 确定标识 .NET Remoting .NET Remoting SSL SSL IPSec IPSec 审核和记录 审核和记录 疑难解答工具 疑难解答工具
返回页首返回页首

疑难解答过程

以下方法已经证明有助于解决安全和与安全上下文相关的问题。

1.

首先从非常清晰地描述问题开始。确保您清楚地知道应该发生什么情况,实际发生了什么问题,以及最重要的是,重现问题所需要的详细步骤。

2.

尽自己所能准确分离问题。尝试判断问题在处理请求过程中的哪一个阶段发生。它是与客户端有关的问题,还是与服务器有关的问题?它是表现为与配置有关,还是与代码有关?尝试通过剥离应用层的方法来分离问题。 例如,考虑构建一个简单的基于控制台的测试客户端应用程序来取代比较复杂的客户端应用程序。

3.

分析错误消息和堆栈跟踪(如果它们可用)。始终从查阅 Windows 事件日志和安全日志开始。

4.

查看 Microsoft 知识库,了解该问题是否已经做为知识库文章存档。

5.

许多安全相关的问题都与运行代码所使用的标识有关;这些通常不是您想像的运行代码的标识。可使用本章确定标识一节提供的代码示例来检索和诊断标识信息。如果标识显示不正确,则检查 web.config 和 machine.config 中的配置设置,同时检查应用程序虚拟目录的 IIS 身份验证设置。在 ASP.NET Web 应用程序中可能影响标识的因素包括:

machine.config 中用来确定 ASP.NET 辅助进程 (aspnet_wp.exe) 进程标识的<processModel>元素。

IIS 中的身份验证设置。

web.config 中的身份验证设置。

web.config 中的模拟设置。

6.

即使看起来当前使用和显示的设置是正确的,您也可能需要显式配置应用程序的 web.config 文件(在应用程序的虚拟目录中),确保它没有从更高一级的应用程序(可能从更高一级的虚拟目录中的 web.config)或 machine.config 中继承设置。

7.

使用本章内下文中“疑难解答工具”一节中列出的一些疑难解答工具来获得更多诊断信息。

8.

尝试在另一台计算机重现发生的问题。这可帮助找出与环境有关的问题,并可指示问题是否存在于应用程序的代码或配置中。

9.

如果您的应用程序在访问远程资源时出现问题,那么您可能遇到了与模拟/委派有关的问题。识别用于远程资源访问的安全上下文;同时,如果您正在使用 Windows 身份验证,则验证提供上下文的帐户(例如,进程帐户)是否能够通过远程计算机执行的身份验证。

10.

搜索新闻组以了解是否有人报告过此问题。如果没有,则将该问题张贴到新闻组中,看看开发社区中是否有人可以提供帮助。 ASP.NET 的在线新闻组的网址是: http://communities.microsoft.com/newsgroups/default.asp?icp=mscom&slcid=US&newsgroup=microsoft.public.dotnet.framework.aspnet

11.

致电 Microsoft 支持中心。有关详细信息,请参见Microsoft 知识库.

搜索实施解决方案

如果您遇到某个问题并且需要了解处理该问题的最佳做法,请使用以下方法。

在 ("Intranet")、("Extranet 安全性")和("Internet") 等章中搜索您的方案或类似方案。

查看 MSDN 库的文档和示例。

从许多提供 ASP.NET 信息的 Web 站点中选择一个来查看,比如:

www.ASP.NET

www.gotdotnet.com

www.asptoday.com

在 Microsoft 知识库中搜索相关的 How To(如何做)文章。

在新闻组中张贴问题。

致电 Microsoft 支持中心。

返回页首返回页首

身份验证问题疑难解答

身份验证问题疑难解答的第一步是区分 IIS 和 ASP.NET 两种身份验证失败消息。

如果您收到的是 IIS 错误消息,那么就看不到 ASP.NET 错误代码。检查应用程序虚拟目录的 IIS 身份验证设置。

创建简单的 HTML 测试页以将 ASP.NET 从解决方案中删除。

如果您收到的是 ASP.NET 错误消息,则应检查应用程序的 web.config 文件中的 ASP.NET 身份验证设置。

IIS 身份验证问题

由于身份验证进程从 IIS 开始,因此应确保 IIS 配置正确。

确保对用户进行身份验证。考虑只启用基本身份验证并手动进行登录,确保您知道正在验证其身份的主体。用形式为“domain/username”的用户名进行登录。

重新启动 IIS 确保登录会话不被缓存。(运行 IISReset.exe 来重新启动 IIS )。

在相继进行的测试之间关闭浏览器,确保浏览器没有缓存凭据。

如果您正在使用集成的 Windows 身份验证,则按下面说明检查浏览器设置。

Internet选项 菜单上单击工具,然后单击高级选项卡。选择启用集成的 Windows 身份验证(需要重新启动)。然后重新启动浏览器。

Internet选项菜单上单击工具,然后单击安全性选项卡。选择适当的 Web 内容区域,并单击自定义级别。在用户身份验证中,确保为应用程序设置了正确的登录设置。您可能需要选择用户名和密码提示,确保在每个测试中您都提供了显式凭据,并且没有任何信息被缓存。

如果浏览器提示您提供凭据,这可能表明您目前登录到一个服务器无法识别的域(例如,您可能是以管理员的身份登录到了本地计算机)。

当您在本地计算机上浏览应用程序时,使用的是您的交互登录令牌,因为您是以交互方式登录到 Web 服务器的。

用简单的显示安全上下文信息的 Web 页进行测试。本章内下文中将提供示例页。

如果测试失败,则对请求的文件上启用审核功能,并检查安全性事件日志。您还必须启用使用“组策略”进行审核这一功能(通过“本地安全策略”工具或“域安全策略”工具)。检查日志有没有无效的用户名或无效的对象访问尝试。

如果您的 Web 应用程序在访问远程资源时出现问题,则对远程资源启用审核功能。

无效的用户名和/或密码通常意味着用来在 Web 服务器上运行 ASP.NET 的帐户无法在远程计算机上正确通过身份验证。如果您尝试用默认的 ASPNET 本地帐户来访问远程资源,则检查以确保您在远程计算机上是否有重复的帐户(和密码)。

如果您看到的错误消息指示登录因 NT AUTHORITY/ANONYMOUS 而失败,这表明 Web 服务器上的标识没有网络凭据,但是正在试图访问远程计算机。

标识 Web 应用程序正在使用哪一个帐户来访问远程资源,并确认它拥有网络凭据。如果 Web 应用程序正在进行模拟,这在 Web 服务器上需要 Kerberos 委派(利用适当配置的帐户)和基本身份验证。

使用 Windows 身份验证

如果应用程序的 Web .config 文件中的<身份验证>元素配置为使用 Windows 身份验证,则在 Web 应用程序中使用以下代码来检查是否正在使用匿名访问(以及已验证身份的用户是否为匿名的 Internet 用户帐户 [IUSR_MACHINE])。

WindowsIdentity winId = HttpContext.Current.User.Identity as WindowsIdentity;if (null != winId){  Response.Write(winId.IsAnonymous.ToString());}  

使用表单身份验证

确保在 global.asax 事件处理程序中正确检索在<forms>元素中指定的 cookie 名称(Application_AuthenticateRequest)。并且,确保正在创建该 cookie。如果客户端被连续重新发送到登录页面(由<forms>ÔªËصÄloginUrl属性指定)这表明由于某种原因没有创建该cookie,或者已验证身份的标识没有放入上下文 (HttpContext.User) 中。

Kerberos 疑难解答

使用以下工具来帮助进行与 Kerberos 有关的身份验证和委派问题的疑难解答。

Kerbtray.exe。此实用工具用于查看当前计算机的缓存中的 Kerberos 票证。它是 Windows 2000 Resource Kit 的一部分,可以从以下网址下载http://www.microsoft.com/downloads/search.asp。搜索“Kerbtray.exe”。

Klist.exe。这是与 Kerbtray 相似的命令行工具,但您可以用它来查看和删除 Kerberos 票证。而且,它也是 Windows 2000 Resource Kit 的一部分,可以从以下网址下载:http://www.microsoft.com/downloads/search.asp。搜索“Klist.exe”。

Setspn.exe。这是可以用来为 Active Directory 服务帐户管理服务主体名称 (SPN) 目录属性的命令行工具。SPN 用于查找一个目标主体名称来运行服务。

它是 Windows 2000 Resource Kit 的一部分,可以从以下网址下载:。http://www.microsoft.com/downloads/search.asp搜索“setspn.exe”。

返回页首返回页首

授权问题疑难解答

检查 Windows ACL。

如果您的应用程序在访问文件或注册表项(或任何使用 ACL 保护的受保护 Windows 对象)时出现问题,请检查 ACL 以确保 Web 应用程序标识至少拥有读取权限。

检查标识

还确保您知道 ASP.NET Web 应用程序正在使用哪一个标识来访问资源。该标识可能是:

ASP.NET 进程标识(在 web.config 的 <processModel> 元素中配置。

该标识默认为使用用户名“machine”和密码“AutoGenerate”指定的本地 ASPNET 帐户。

已验证身份的调用方的标识(如果在 web.config 中启用了模拟功能),如下图所示。

<identity impersonate="true" />  

如果您没有在 IIS 中禁用匿名访问,这将是 IUSR_MACHINE。

指定的模拟标识,如下所示。

<identity impersonate="true"          userName="registry:HKLM/SOFTWARE/YourSecureApp/                    identity/ASPNET_SETREG,userName"          password="registry:HKLM/SOFTWARE/YourSecureApp/                    identity/ASPNET_SETREG,password" />

本例示出了<标识>元素,其中凭据在注册表中,并使用 aspnet_setreg.exe 实用工具进行了加密。明文用户名密码属性值被指向安全注册项的指针和和含有加密凭据的名称值所取代。有关这个实用工具及其下载的详细信息,请参见 Microsoft 知识库中的文章 Q329290:“如何做:使用 ASP.NET 实用工具加密凭据和会话状态连接字符串”

更多信息

有关用来运行 ASP.NET 的标识和用来访问本地和网络资源的标识的详细信息,请参见“ASP.NET 安全”一章。

检查 元素

确认<allow>和<deny> 元素的配置正确。

如果您有<denyusers="?" />元素并且正在使用表单身份验证和/或 IIS 匿名身份验证,您必须将IPrincipal对象显式放置在HttpContext.User中,否则将收到一个拒绝访问 401 响应。

确保已验证身份的用户在用<allow>和<deny>元素指定的角色中。

返回页首返回页首

ASP.NET

启用跟踪

ASP.NET 通过快速而简单的跟踪来显示页面中的事件执行情况和常用变量的值。这可能是一个非常有效的诊断辅助手段。使用页面级Trace指令来打开跟踪功能,如下所示:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"  

更多信息

有关 ASP.NET 的新跟踪功能的详细信息,请参见知识库文章Q306731:“INFO:New Tracing Feature in ASP.NET”(INFO: ASP.NET 的新跟踪功能)。

配置设置

大多数应用程序设置应当放置在 web.config 中。以下列表显示了与安全性有关并且可以放置在 web.config 中的主要设置。

<authentication><authorization><trust><identity>
以下设置控制着用于运行 ASP.NET 辅助进程 (aspnet_wp.exe) 的标识,必须将其放置在 machine.config 中。
<processModel>

应用程序的配置设置始终首先从应用程序的 web.config 文件中检索,这些设置覆盖 machine.config 中的任何等效设置。如果您要在应用程序中应用某个设置,则在应用程序的 web.config 文件中显式配置该设置。

特定应用程序的主要的(并且通常是唯一的)web.config 文件位于其虚拟目录的根目录中。子目录也可以包含 web.config 文件。这些文件中的设置覆盖父目录中的 web.config 文件的设置。

返回页首返回页首

确定标识

许多安全问题和拒绝访问问题都与用于资源访问的标识有关。本章提供的以下代码示例可以用来帮助确定 Web 页、COM 对象和 Web 服务中的标识。

有关.NET 标识变量的详细信息,请参见"ASP.NET 标识矩阵。"

确定 Web 页中的标识

下面的脚本可以用来收集与安全上下文有关的信息,并指明了用来运行 Web 页的标识。

要使用此代码,通过复制和粘贴它来创建一个带有 .aspx 文件扩展名的文件。将该文件复制到 IIS 虚拟目录,并通过浏览器查看页面。

<%@ Page language="c#" AutoEventWireup="true" %><%@ Import Namespace="System.Threading" %><%@ Import Namespace="System.Security.Principal" %><HTML>  <HEAD>    <title>WhoAmI</title>  </HEAD>  <body>    <form id="WhoAmI" method="post" runat="server">      <TABLE id=contextTable border=1>        <TR>          <TD align=middle colSpan=3 rowSpan="">                HttpContext.Current.User.Identity</TD>        </TR>        <TR>          <TD>Name</TD>          <TD><asp:Label ID="contextName" Runat=server /></TD>        </TR>        <TR>          <TD>IsAuthenticated</TD>          <TD><asp:Label ID="contextIsAuth" Runat=server /></TD>        </TR>        <TR>          <TD>AuthenticationType</TD>          <TD><asp:Label ID="contextAuthType" Runat=server /></TD>        </TR>      </TABLE>       <br><br>             <TABLE id=windowsIdentityTable border=1>        <TR>          <TD align=middle colSpan=3 rowSpan="">WindowsIdentity.GetCurrent()</TD>        </TR>        <TR>          <TD>Name</TD>          <TD><asp:Label ID="windowsName" Runat=server /></TD>        </TR>        <TR>          <TD>IsAuthenticated</TD>          <TD><asp:Label ID="windowsIsAuth" Runat=server /></TD>        </TR>        <TR>          <TD>AuthenticationType</TD>          <TD><asp:Label ID="windowsAuthType" Runat=server /></TD>        </TR>      </TABLE>      <br><br>             <TABLE id=threadIdentityTable border=1>        <TR>          <TD align=middle colSpan=3               rowSpan="">Thread.CurrentPrincipal.Identity</TD>        </TR>        <TR>          <TD>Name</TD>          <TD><asp:Label ID="threadName" Runat=server /></TD>        </TR>        <TR>          <TD>IsAuthenticated</TD>          <TD><asp:Label ID="threadIsAuthenticated" Runat=server /></TD>        </TR>        <TR>          <TD>AuthenticationType</TD>          <TD><asp:Label ID="threadAuthenticationType" Runat=server /></TD>        </TR>      </TABLE>    </form>  </body></HTML><script runat=server>  void Page_Load(Object sender, EventArgs e)  {    IIdentity id = HttpContext.Current.User.Identity;    if(null != id)    {      contextName.Text = id.Name;      contextIsAuth.Text = id.IsAuthenticated.ToString();      contextAuthType.Text = id.AuthenticationType;    }    id = Thread.CurrentPrincipal.Identity;    if(null != id)    {      threadName.Text = id.Name;      threadIsAuthenticated.Text = id.IsAuthenticated.ToString();      threadAuthenticationType.Text = id.AuthenticationType;    }    id = WindowsIdentity.GetCurrent();    windowsName.Text = id.Name;    windowsIsAuth.Text = id.IsAuthenticated.ToString();    windowsAuthType.Text = id.AuthenticationType;  }</script>

确定 Web 服务中的标识

可以在 Web 服务中使用以下代码来获取标识信息。

 [WebMethod]public string GetDotNetThreadIdentity(){  return Thread.CurrentPrincipal.Identity.Name;}[WebMethod]public string GetWindowsThreadIdentity(){  return WindowsIdentity.GetCurrent().Name;}[WebMethod]public string GetUserIdentity(){  return User.Identity.Name;}[WebMethod]public string GetHttpContextUserIdentity(){  return HttpContext.Current.User.Identity.Name;}  

更多信息

查看所有与安全有关的知识库文章。

有关讨论常见错误消息的安全相关的文章的列表,请使用以下链接访问Microsoft 知识库,并使用以下搜索关键字:

prb kbsecurity kbaspnet

确定Visual Basic 6 COM 对象中的标识

可以使用以下方法来返回 Visual Basic 6 COM 对象的标识。您可以通过 COM interop 直接从 ASP.NET 应用程序调用 Visual Basic 6.0 COM 对象。如果您需要解决组件尝试访问资源时出现的拒绝访问错误,则以下方法可帮助您。

Private Declare Function GetUserName Lib "advapi32.dll" _        Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As LongPublic Function WhoAmI()   Dim sBuff    As String   Dim lConst   As Long   Dim lRet     As Long   Dim sName    As String       lConst = 199   sBuff = Space$(200)   lRet = GetUserName(sBuff, lConst)   WhoAmI = Trim$(Left$(sBuff, lConst))End Function   
返回页首返回页首

.NET Remoting

如果远程对象是在 ASP.NET 中驻留的,并且配置为使用 Windows 身份验证,您必须通过信道的凭据属性来指定用于身份验证的凭据。如果没有明确设置凭据,就会在没有任何凭据的情况下调用远程对象。如果需要 Windows 身份验证,这将导致出现 HTTP 状态 401,拒绝访问响应。

要使用与当前线程模拟令牌(如果客户端线程正在进行模拟)或进程令牌(没有模拟)相关的凭据,请使用默认的凭据。这可以使用以下设置在客户端配置文件中进行配置:

<channel ref="http" useDefaultCredentials="true" />

如果 ASP.NET Web 应用程序调用远程组件并且 Web 应用程序已配置为进行模拟,则该 Web 应用程序必须使用 Kerberos 或基本身份验证所有其他的身份验证类型不可以在委派方案中使用。

如果 Web 应用程序没有配置为进行模拟,则使用 ASP.NET 辅助进程的进程标识。该标识是在 machine.config 的<processModel> 元素中指定的,默认为本地 ASPNET 帐户。

确保该进程使用一个可以通过远程计算机执行的身份验证的帐户运行。

更多信息

有关调用远程组件时设置客户端凭据的详细信息,请参见".NET Remoting"一章。

返回页首返回页首

SSL

要解决与 SSL 有关的问题:

确认您是否能够远程登录到客户端和服务器计算机的 IP 地址处的端口 443。如果不能,这通常表明 sspifilt.dll 未加载,或者版本不正确,也可能是因为与其他 ISAPI 扩展冲突。

检查证书。如果您远程登录到 443,请使用浏览器的查看证书对话框检查证书属性。检查证书的有效日期和截止日期,公用名是否正确,并检查颁发机构信息访问 (AIA) 或证书吊销列表 (CRL) 的分发点。

确认您能够成功浏览到这些 AIA/CRL 点的目录。

如果您正在使用自定义的客户端应用程序(而不是 Web 浏览器)来访问需要客户端证书的、启用了 SSL 的 Web 站点,则检查客户端证书是否位于客户端应用程序访问的存储中。

当您使用浏览器时,证书必须在交互式用户的用户存储中。服务或自定义应用程序可以从机器存储中或与服务帐户配置文件关联的存储中加载客户端证书。使用服务 MMC 管理单元(安装证书服务时提供),从管理工具程序组检查证书存储的内容。

更多信息

请参见下列与 SSL 有关的知识库文章。

Q257591:“Description of the Secure Sockets Layer (SSL) Handshake”(安全套接字层 (SSL) 同步交换说明)

Q257586:“Description of the Client Authentication Process During the SSL Handshake”(对 SSL 同步交换中的客户端身份验证进程的说明)

Q257587:“Description of the Server Authentication Process During the SSL Handshake”(对 SSL 同步交换中的服务器身份验证进程的说明)

Q301429:“HOWTO:Install Client Certificate on IIS Server for ServerXMLHTTP Request Object”(如何做:在 IIS 服务器上为 ServerXMLHTTP 请求对象安装客户端证书)

Q295070:“ SSL (https) 连接使用某个证书时速度缓慢,而使用其他证书时速度要快一些”

返回页首返回页首

IPSec

以下知识库中的文章提供 IPSec 问题疑难解答的步骤。

Q259335:“Basic L2TP/IPSec Troubleshooting in Windows”(Windows 中的基本 L2TP/IPSec 疑难解答)

Q257225:“Basic IPSec Troubleshooting in Windows 2000”(Windows 2000 中的基本 IPSec 疑难解答)

返回页首返回页首

审核和记录

Windows 安全日志

在问题诊断过程中首先查阅 Windows 事件和安全日志。

更多信息

有关如何启用审核和监控事件的详细信息,请参见知识库文章 Q300958:“怎样做:在Windows 2000中监视未经授权的用户访问”。

SQL Server 审核

默认情况下,禁用登录审核。您可以通过 SQL Server 企业管理器或通过更改注册表来进行配置。

默认情况下,SQL Server 日志文件位于以下目录中。它们是文本文件,并且可以用任何文本编辑器(比如 Notepad)来阅读。

C:/Program Files/Microsoft SQL Server/MSSQL/LOG   

要在企业管理器中启用登录审核

1.

启动“企业管理器”。

2.

在左边的树控件中选择所需的 SQL Server,右键单击,然后单击属性

3.

单击安全性选项卡。

4.

选择相关的审核级别:失败、成功或全部

使用注册表设置启用登录审核

1.

在注册表中创建下面的AuditLevel项,将其值设置为下面指定的 REG_DWORD 值之一。

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer/AuditLevel  

2.

将该项的值设置为下列数字值之一,从而使您能够捕获相应级别的细节。

3—既捕获成功的登录尝试也捕获失败的登录尝试

2— 只捕获失败的登录尝试

1— 只捕获成功的登录尝试

0—不捕获任何登录尝试

建议您打开失败登录审核功能,因为据此可以判断是否有人野蛮攻击 SQL Server。对失败的审核尝试进行记录对性能的影响很小,除非您正在遭受攻击,而在这种情况下您必须要知道这些尝试情况。

您还可以通过使用脚本来对 SQL Server DMO(数据库管理对象)设置审核级别,如以下代码片段所示。

Sub SetAuditLevel(Server As String, NewAuditLevel As SQLDMO_AUDIT_TYPE)    Dim objServer As New SQLServer2    objServer.LoginSecure = True  'Use integrated security    objServer.Connect Server      'Connect to the target SQL Server        'Set the audit level    objServer.IntegratedSecurity.AuditLevel = NewAuditLevel    Set objServer = NothingEnd Sub  

查阅 SQL Server 联机图书得知,枚举类型 SQLDMO_AUDIT_TYPE 的成员包括:

SQLDMOAudit_All     3 Log all authentication attempts - success or failure SQLDMOAudit_Failure 2 Log failed authentication SQLDMOAudit_None    0 Do not log authentication attempts SQLDMOAudit_Success 1 Log successful authentication

日志条目示例

以下列表列出了 SQL Server 日志中的一些成功条目和失败条目示例。

使用集成的Windows 身份验证成功登录:

2002-07-06 22:54:32.42 logon     Login succeeded for user 'SOMEDOMAIN/Bob'. Connection: Trusted.  

使用 SQL 标准身份验证成功登录:

2002-07-06 23:13:57.04 logon     Login succeeded for user 'SOMEDOMAIN/Bob'. Connection: Non-Trusted.  

失败登录:

2002-07-06 23:21:15.35 logon     Login failed for user 'SOMEDOMAIN/BadGuy'.  

IIS 日志记录

IIS 日志记录可以设置为不同的格式。如果您使用 W3C 扩展日志记录,那么可以利用一些详细信息。例如,您可以打开“发生时间”来记录提供一个页面使用了多长时间。这可用来在生产 Web 站点上找出慢速网页。您还可以启用 URI 查询来记录查询字符串参数,这可用来为你的网页排查有关 GET 操作的问题。下图显示 IIS 日志记录的“扩展属性”对话框。

f13sn01

13.1 IIS 扩展日志记录属性

返回页首返回页首

疑难解答工具

本章介绍的一组工具证明非常有用,可以帮助您诊断与安全有关和无关的问题。

文件监视程序 (FileMon.exe)

您可以利用此工具来监视文件和文件夹的尝试访问次数。它对解决文件访问权限方面的问题非常有用。可从 www.sysinternals.com 上获得。

更多信息

有关详细信息,请参见知识库文章 Q286198:“HOWTO:Track 'Permission Denied' Errors on DLL Files”(如何做:跟踪 DLL 文件的“权限被拒绝”错误)。

Fusion 日志查看器(Fuslogvw.exe)

Fusion 日志查看器是 .NET Framework SDK 附带提供的。它是一个可以用于跟踪 Fusion 绑定问题的实用工具(有关详细信息,请参见 .NET Framework 文档)。

要为 ASP.NET 创建 Fusion 日志,您需要在注册表中提供日志路径,并通过 Fusion 日志查看器实用工具启用记录失败选项。

要为日志文件提供日志路径,请使用 regedit.exe 将目录位置(比如 e:/MyLogs)添加到以下注册表项:

 [HKLM/Software/Microsoft/Fusion/LogPath]   

ISQL.exe

ISQL 可用于从命令提示符测试 SQL 。它可以帮助您高效地测试不同用户的不同登录。您可以在安装 SQL Server 的计算机上通过在命令提示符下输入 isql.exe 运行 ISQL。

使用 SQL 身份验证的连接

您可以利用–U 开关来传递用户名,并且还可以用–P 开关来指定密码。如果您没有指定密码,则 ISQL 将提示您指定一个密码。下面从 Windows 命令提示符发出的命令将产生一个密码提示。这种方法(而不是使用–P 开关)的优点是密码不会出现在屏幕上。

C:/ >isql -S YourServer -d pubs -U YourUserPassword:  

使用 Windows 身份验证的连接

您可以通过–E 开关来使用受信任的连接,该连接使用当前交互式登录的用户的安全上下文。

C:/ >isql -S YourServer -d pubs–E  

运行简单查询

一旦登录后,您可以运行一个简单的查询,如下所示。

1> use pubs2> SELECT au_lname, au_fname FROM authors3> go  

要退出 ISQL,请在命令提示符下输入quit

Windows 任务管理器

Windows XP 和 Windows .NET Server 上的任务管理器用于显示运行进程所使用的标识。

查看当前用于运行进程的标识

1.

启动

2.

单击进程选项卡。

3.

视图菜单中,单击选择列

4.

选择用户名,然后单击确定

随即显示用户名(进程标识)。

网络监视器 (NetMon.exe)

NetMon 用于捕获和监视网络通信量。

更多信息

请参见下列知识库文章:

Q243270:“如何做:在 Windows 2000 中安装网络监视器”

Q148942:“HOW TO:Capture Network Traffic with Network Monitor”(如何做:使用网络监视器捕获网络通信量)

Q252876:“HOW TO:View HTTP Data Frames Using Network Monitor”(如何做:使用网络监视器查看 HTTP 数据帧)

Q294818:“Frequently Asked Questions About Network Monitor”(如何做:关于网络监视器的常见问题)

在客户端和服务器位于同一台计算机上时还可以使用另外一对工具来捕获网络跟踪(这无法用 Netmon 来完成):

tcptrace.exe.可从以下网址获得:www.pocketsoap.com。这对于 Web 服务非常有用,因为您可以将其设置为在应用程序运行时记录和显示通信量。您可以切换到基本身份验证,并使用 tcptrace 来查看正在向 Web 服务发送什么凭据。

packetmon.exe.可从以下网址获得:www.analogx.com。虽然这是网络监视器的简化版,但是更容易配置。

注册表监视器 (regmon.exe)

此工具用于监视对注册表的访问。您可以使用它来显示所有进程或一组指定进程的读取权限和更新情况。当您需要解决注册表权限方面的问题时,可以使用此工具。可从www.sysinternals.com上获得。

WFetch.exe

此工具用于排查 IIS 和 Web 客户端之间的连接问题。在这类情况下,您需要查看未在 Web 浏览器中显示的数据,比如包含在请求和响应数据包中的 HTTP 标头。

更多信息

有关该工具及其下载的详细信息,请参见知识库文章 Q284285:“How to Use Wfetch.exe to Troubleshoot HTTP Connections”(如何使用 Wfetch.exe 解决 HTTP 连接问题)。

Visual Studio.NET 工具

Microsoft.NET Framework SDK 安全工具可以在以下网址找到:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconnetframeworktools.asp

更多信息

请参见下列知识库文章:

Q316365:“INFO:如何使用.NET 性能计数器的指南”

Q308626:“INFO:.NET框架和 Visual Studio 中的调试指南”

Q317297:“INFO:Roadmap for Debugging Hangs, Memory Leaks in VB .NET”(INFO: VB .NET 中的挂起、内存泄漏调试指南)

WebServiceStudio

此工具可以作为测试 Web 服务功能的一般客户端使用。它捕获并显示 SOAP 响应和请求数据包。

您可以从以下网址下载该工具:http://www.gotdotnet.com/team/tools/web_svc/default.aspx

Windows 2000 资源工具箱

可从以下网址获得:http://www.microsoft.com/windows2000/techinfo/reskit/default.asp

要获得完整的工具列表,请参见:http://www.microsoft.com/windows2000/techinfo/reskit/tools/default.asp

转到原英文页面


返回页首返回页首
 
原创粉丝点击