Практическое руководство. Получение доступа к серверу SQL Server с помощью встроенной безопасности Windows

Visual Studio 2010

Обновлен: Ноябрь 2007

Если приложение работает во внутренней сети Windows, то для доступа к базе данных можно использовать встроенную проверку подлинности Windows. Встроенные возможности обеспечения безопасности используют идентификатор Windows, основанный на потоке операционной системы, используемом для доступа к базе данных сервера SQL Server. Можно сопоставить идентификатор Windows с базой данных SQL Server и ее разрешениями.

Для подключения к серверу SQL Server с помощью встроенной проверки подлинности Windows необходимо указать идентификатор Windows, под которым запускается приложение ASP.NET. Также необходимо убедиться, что у этого идентификатора есть доступ к базе данных SQL Server. В этом разделе приведен пример кода, в котором отображается текущий идентификатор Windows приложения ASP.NET.

Если SQL Server размещен на компьютере, не являющемся веб-сервером, идентификатор Windows должен предоставлять сетевой доступ к удаленному экземпляру сервера SQL Server. (Сети Windows, использующие проверку подлинности Kerberos, предоставляют такую возможность.) Однако в зависимости от параметров идентификатора элемента конфигурации, идентификатор Windows, установленный на потоке операционной системы для приложений ASP.NET, не сможет соответствующим образом обмениваться данными с удаленным сервером SQL Server.

Можно указать определенное имя пользователя и пароль для идентификации рабочего процесса веб-узла, как показано в разделе Практическое руководство. Доступ к серверу SQL Server с помощью учетной записи пользователя сопоставленного домена Windows, или можно олицетворить проверяемое удостоверение, предоставленное службами IIS. Для олицетворения идентификатора Windows, предоставленного IIS, следует присвоить атрибуту impersonateидентификатора элемента конфигурации значение true, как показано в следующем примере:

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

В службах IIS только при обычной проверке подлинности пользователи входят в систему с маркером безопасности, который по сети передается удаленному серверу SQL Server. По умолчанию в других режимах безопасности IIS, используемых вместе с параметрами элемента конфигурации идентификатора маркер безопасности не передается по сети удаленному серверу SQL Server.

Если веб-узел поддерживает только анонимный доступ в IIS, то используется маркер безопасности учетной записи пользователя Windows для анонимного доступа, настроенный в IIS. Анонимную учетную запись пользователя можно использовать для проверки подлинности с удаленным сервером SQL Server. Однако анонимная учетная запись по умолчанию является локальной учетной записью компьютера и поэтому не существует на удаленном сервере SQL Server. Можно изменить анонимную учетную запись IIS таким образом, чтобы использовать доменную учетную запись, или можно дублировать учетную запись компьютера на удаленном сервере SQL Server, создав на нем локальную учетную запись с тем же именем пользователя и паролем. Также свойству LogonMethod метабазы для IIS6 следует присвоить значение, позволяющее передавать учетные данные по сети. Например, параметр MD_LOGON_NETWORK_CLEARTEXT метабазы позволяет передавать учетные данные по сети.

Если идентификатор Windows для приложения неизвестен или если при входе в систему под данным идентификатором можно передавать маркер по сети, можно запустить следующую страницу ASP.NET как часть приложения, чтобы отобразить идентификатор Windows и значение, определяющее возможность его передачи по сети. Обратите внимание, что в следующем примере не учитывается, было ли настроено делегирование Kerberos для используемого домена.

<%@ 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 xmlns="http://www.w3.org/1999/xhtml" >
<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>


В следующей процедуре показано, как получить доступ к базе данных SQL Server с помощью встроенной проверки подлинности Windows в ситуации с использованием интрасети, в которой пользователю предоставлен доступ к серверу SQL Server.

Для начала необходимо настроить службы IIS приложения таким образом, чтобы был отключен анонимный доступ и включена проверка подлинности Windows.

Чтобы настроить службы IIS для использования проверки подлинности Windows, выполните следующие действия.

  1. В Windows следует открыть инструмент управления службами IIS.

    • В Windows Server 2000 и Windows 2003 Server, нажмите кнопку Пуск, наведите указатель на Программы, затем выберите Администрирование, а затем Диспетчер служб Интернета.

    • В операционной системе 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"/>
    
    bsz5788z.alert_note(ru-ru,VS.100).gifПримечание.

    Элементы в файле Web.config чувствительны к регистру.

При создании строки подключения для доступа к серверу SQL Server в нее необходимо включить атрибуты, которые указывают серверу SQL Server, что используется встроенная безопасность Windows.

Чтобы настроить строки подключения для встроенной безопасности 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 должен быть настроен таким образом, чтобы он распознавал пользователей, получающих к нему доступ.

Чтобы настроить сервер SQL Server для встроенной безопасности Windows, выполните следующие действия.

  1. В меню Пуск Windows выберите Microsoft SQL Server, а затем Enterprise Manager.

  2. Следует открыть узел сервера и узел базы данных, доступ к которой необходимо разрешить пользователям.

  3. Щелкните правой кнопкой мыши папку Пользователи и выберите пункт Новый пользователь базы данных.

  4. В диалоговом окне Свойства пользователя базы данных введите домен\имя пользователя в поле Имя входа в систему и затем нажмите кнопку OK. Другой способ: можно настроить сервер SQL Server для предоставления доступа к базе данных всем пользователям домена.

Показ: