现在的位置: 首页 > 综合 > 正文

如何:使用 Windows 集成安全性访问 SQL Server

2013年08月13日 ⁄ 综合 ⁄ 共 3987字 ⁄ 字号 评论关闭
ASP.NET
如何:使用 Windows 集成安全性访问 SQL Server

 

如果您的应用程序运行在基于 Windows 的 Intranet 上,则也许可以将 Windows 集成身份验证用于数据库访问。集成安全性使用在操作系统线程上建立的当前 Windows 标识来访问 SQL Server 数据库。然后,您可以将 Windows 标识映射到 SQL Server 数据库和权限。

若要使用 Windows 集成身份验证连接到 SQL Server,必须标识是以什么 Windows 标识来运行 ASP.NET 应用程序的。还必须确保已授予该标识访问 SQL Server 数据库的权限。本主题包括显示 ASP.NET 应用程序的当前 Windows 标识的代码示例。

连接到 SQL Server

如果 SQL Server 与 Web 服务器在不同的计算机上,则 Windows 标识必须能够通过网络传递给 SQL Server 的远程实例。(已使用 Kerberos 身份验证正确进行配置的 Windows 网络能够实现此目的。)但是,在 ASP.NET 应用程序的操作系统线程上建立的 Windows 标识也许无法正确地传递给远程 SQL Server,这取决于 identity 配置元素中的设置。

您可以为网站的辅助进程标识提供特定的用户名和密码(如如何:使用映射的 Windows 域用户访问 SQL Server 中所示),也可以模拟 Internet 信息服务 (IIS) 提供的已验证的标识。若要模拟 IIS 提供的 Windows 标识,请将 identity 配置元素的 impersonate 属性设置为 true,如下面的示例所示:

<system.web>
  <identity impersonate="true" />
</system.web>

在 IIS 中,只有基本身份验证使用通过网络传递给远程 SQL Server 的安全标记来使用户登录。默认情况下,与 identity 配置元素设置一起使用的其他 IIS 安全模式将不会生成可以通过远程 SQL Server 的身份验证的标记。

如果网站配置为仅支持 IIS 中的匿名访问,则从 IIS 传递的安全标记将是 IIS 中配置的匿名访问的 Windows 用户帐户的安全标记。匿名用户帐户可用于通过远程 SQL Server 的身份验证。但是,默认的匿名用户帐户是本地计算机帐户,因而将不会作为远程 SQL Server 上的帐户存在。您可以更改 IIS 匿名帐户以使用域帐户,也可以镜像远程 SQL Server 上的本地计算机帐户(方法为在远程 SQL Server 上创建一个具有相同用户名和密码的本地帐户)。此外,还必须将 IIS6 的 LogonMethod 元数据库属性设置为允许通过网络传递凭据的选项。例如,元数据库设置 MD_LOGON_NETWORK_CLEARTEXT 允许通过网络传递登录凭据。

如果您不确定您的应用程序的 Windows 标识,并且不确定标识是否使用可以通过网络传递的标记登录,可以运行下面的 ASP.NET 页(作为应用程序的一部分)来显示 Windows 标识的名称以及一个指示是否可以通过网络传递标识的值。请注意,下面的示例不考虑是否已经成功地为您的域设置了 Kerberos 委托。

Visual Basic
<%@ Page Language="VB" %>
<%@ Import namespace="System.Security.Principal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
<head runat="server">
    <title>ASP.NET Example</title>
<script runat="server">

Public Function WillFlowAcrossNetwork(w As WindowsIdentity) As Boolean
  For Each s As SecurityIdentifier In w.Groups
    If s.IsWellKnown(WellKnownSidType.InteractiveSid) Then Return True
    If s.IsWellKnown(WellKnownSidType.BatchSid)       Then Return True
    If s.IsWellKnown(WellKnownSidType.ServiceSid)     Then Return True
  Next

  Return False
End Function

</script>
</head>
<body>
<%
  Dim current As WindowsIdentity =  WindowsIdentity.GetCurrent()
  Response.Write(current.Name & ", " & WillFlowAcrossNetwork(current) & "<br />")
%>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Import namespace="System.Security.Principal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
<head runat="server">
    <title>ASP.NET Example</title>
<script runat="server">

public bool WillFlowAcrossNetwork(WindowsIdentity w)
{
  foreach (SecurityIdentifier s in w.Groups)
  {
    if (s.IsWellKnown(WellKnownSidType.InteractiveSid)) { return true; }
    if (s.IsWellKnown(WellKnownSidType.BatchSid))       { return true; }
    if (s.IsWellKnown(WellKnownSidType.ServiceSid))     { return true; }
  }

  return false;
}

</script>
</head>
<body>
<%
  WindowsIdentity current =  WindowsIdentity.GetCurrent();
  Response.Write(current.Name + ", " + WillFlowAcrossNetwork(current) + "<br />");
%>
</body>
</html>

下面的过程演示如何在 Intranet 方案中使用 Windows 集成身份验证访问 SQL Server 数据库,而在该方案中,已分别授予每个用户访问 SQL Server 的权限。

开始时,您需要在 IIS 中将应用程序配置为禁用匿名访问并启用 Windows 身份验证。

为 Windows 集成身份验证配置 IIS

  1. 在 Windows 中,打开“Internet 信息服务”管理工具。

    • 在 Microsoft Windows 2000 Server 或 Windows Server 2003 操作系统中:在 Windows“开始”菜单中,依次指向“程序”、“管理工具”和“Internet 服务管理器”。

    • 在 Microsoft Windows XP Professional 操作系统中:打开控制面板中的“管理工具”。

  2. 打开您的服务器的节点,然后继续打开节点,直到找到您的应用程序的节点(通常在“默认网站”之下)。

  3. 右击您的应用程序,再单击“属性”。

  4. 在“目录安全性”选项卡上,单击“编辑”。

  5. 在“身份验证方法”对话框中,清除“匿名访问”复选框,然后执行下列操作之一:

    • 如果 SQL Server 与 IIS 位于同一台计算机上,选中“集成 Windows 身份验证”复选框。

    • 如果 SQL Server 是远程服务器,选中“基本身份验证”复选框,并清除“集成 Windows 身份验证”复选框。

  6. 关闭所有对话框。

在应用程序配置文件 (Web.config) 中,指定应用程序将模拟 IIS 提供的用户凭据。

将 Web.config 配置为模拟 IIS 提供的标识

  • 打开应用程序的 Web.config 文件并向 system.web 元素添加以下内容:

    <identity impersonate="true"/>

    Note注意

    Web.config 中的元素区分大小写。

在创建连接字符串以访问 SQL Server 时,必须包含通知 SQL Server 您正在使用集成安全性的属性。

为 Windows 集成安全性配置连接字符串

  • 在 SQL Server 的任何连接字符串中,包含属性 Trusted_Connection=Yes 并移除用户名和密码属性。

    下面显示的是一个为 Windows 集成安全性配置的典型连接字符串:

    "workstation id=WebServer1;packet size=4096;
    Trusted_Connection=Yes;data source=SQLServer01";
    persist security info=False;initial catalog=northwind"

将 SQL Server 设置为可以识别将访问它的用户。

为 Windows 集成安全性配置 SQL Server

  1. 从 Windows 的“开始”菜单中,选择“Microsoft SQL Server”,然后选择“企业管理器”。

  2. 打开服务器的节点,并展开希望将其权限授予用户的数据库的节点。

  3. 右击“用户”节点,选择“新建数据库用户”。

  4. 在“数据库用户属性”对话框中,在“登录名”框中输入/用户名,然后单击“确定”。另外,将 SQL Server 配置为允许所有域用户访问数据库。

 

抱歉!评论已关闭.