Лучший способ подключения сервера sql (проверка подлинности Windows и проверка подлинности SQL Server) для приложения asp.net

У меня есть база данных и сайт с проверкой подлинности форм. Он отлично работает с VS2008. На этот раз я использую "Trusted_connection = True". Но когда он открывается извне или непосредственно из браузера, я получаю сообщение об ошибке "Ошибка входа для пользователя" NT AUTHORITY\ANONYMOUS LOGON ".

Я знаю, что это связано с разрешением. SQL-сервер основан на проверке подлинности Windows.

  • Каков наилучший подход для управления подключением пользователя к SQL Server?
  • Должен ли я включать проверку подлинности SQL Server?

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

Примечание. SQL Server установлен на сервере домена.

Ответ 1

Аутентификация сайта не имеет ничего общего с аутентификацией между ASP и SQL. "Аутентификация форм" на самом деле не является формой подлинной аутентификации, это просто роль и членство в приложении ASP.Net, не связанное с инфраструктурой безопасности.

Когда вы запускаете свой сайт из Visual Studio, вы запускаете веб-сервер Visual Studio под своей собственной учетной записью, и этот веб-сервер будет аутентифицироваться на SQL Server с использованием NTLM/Kerberos, поскольку вы работаете под вашими учетными данными.

При посещении сайта из браузера ваш сайт запускается из пула приложений IIS с идентификатором указанного пула приложений, который обычно является локальным пользователем с именем IUSER _... Этот локальный пользователь при аутентификации с помощью SQL Server использование NTLM/Kerberos будет аутентифицироваться как анонимный пользователь, поскольку локальная учетная запись не имеет никакого значения на удаленном компьютере/домене, на котором размещен SQL Server.

Решение состоит в том, чтобы изменить идентификатор пула приложений для пользователя, который может аутентифицироваться с помощью SQL Server. Для этого хостинг-машина IIS должна быть присоединена к тому же домену, что и хост-машина SQL Server (или домен, который доверяет домену хост-компьютера SQL Server), и идентификатор пула приложений должен быть изменен на учетную запись в этом домене. Поэтому, если машина SQL Server работает на машине, подключенной к домену FOO, тогда:

  • убедитесь, что машина IIS соединена с FOO
  • создать пользователя домена FOO\MyWebApp
  • измените идентификатор пула приложений на FOO\MyWebApp
  • добавить логин SQL для FOO\MyWebApp
  • предоставить необходимое разрешение в SQL для FOO\MyWebApp

Альтернатива использования проверки подлинности SQL плоха по нескольким причинам (возможность выставить пароль в web.config, возможность подвергать пароль при аутентификации на проводе). Если хостинг-машина IIS не подключена к домену, вы можете использовать зеркальные учетные записи (локальные учетные записи с одинаковым именем и паролем на хосте IIS и на узле SQL), но это также является недостатком: не может работать с Kerberos, пароль учетной записи должен быть синхронизированы на двух хостах и ​​т.д.

Ответ 2

Один из подходов - создать учетную запись службы для использования приложения. Вы создаете учетную запись в Active Directory или аналогичной. В IIS установите пул приложений для работы с этой учетной записью службы. В SQL Server предоставите разрешения для учетной записи службы, либо напрямую, либо путем размещения учетной записи службы в роли.

Вот одна статья о как это сделать.

Ответ 3

Создайте учетную запись управляемого службы в домене, где принадлежит и доверяет как машина SQL Server, так и сервер веб-сервера (IIS). Затем запустите пул приложений веб-серверов в учетной записи управляемой службы. Создайте учетную запись SQL Server, используя учетную запись управляемого службы. Прочтите следующее сообщение Technet для получения дополнительной информации о создании управляемых учетных записей службы;

http://technet.microsoft.com/en-us/library/dd548356(v=ws.10).aspx