Ошибка "Ошибка входа для пользователя" NT AUTHORITY\IUSR "в ASP.NET и SQL Server 2008

В моем веб-приложении ASP.NET v3.5 возникает следующее исключение, когда он пытается открыть соединение с базой данных SQL Server 2008:

System.Data.SqlClient.SqlException: Не удается открыть базу данных "MyDbName" запрошенный логином. Вход не смогли. Ошибка входа для пользователя NT AUTHORITY\IUSR".

Дело в том, что я добавил NT AUTHORITY\IUSR в список серверов для входа в систему и список пользователей в базе данных. Для сервера я предоставил пользователю роль Public, а для базы данных я предоставил разрешения db_datareader.

Я также предоставил то же самое для NT AUTHORITY\NETWORK SERVICE, который является идентификатором, с которым работает пул приложений.

Веб-приложение размещено в IIS7, если это имеет значение. Проблема повторяется, когда DB и IIS находятся на одной и той же физической машине.

Ответ 1

Фокус в том, что NT AUTHORITY\NETWORK SERVICE фактически появляется в базе данных как DOMAINNAME\MACHINENAME$ (обратите внимание на знак $!). То есть, когда вы переходите границу машины с вашего веб-сервера на SQL Server, SQL Server видит учетную запись компьютера, если вы используете учетные записи NETWORK SERVICE или LOCAL SYSTEM. Если вы используете любую другую учетную запись, отличную от домена, SQL Server не получит ваши учетные данные.

Я немного озадачен вашим сообщением об ошибке. По правде говоря, я не думаю, что когда БД находится в другом окне, вы увидите что-нибудь кроме Login Failed for NT AUTHORITY\ANONYMOUS LOGON.

IUSR используется для анонимных веб-сайтов и не может передавать провод на SQL Server. Вы можете найти способ работать, если вы делаете все на одной машине, но я никогда не узнаю, потому что я никогда не буду так делать...; -)

Ответ 2

Я бы предложил создать отдельную (желательно доменную) учетную запись и указать ее в строке подключения (обычно в web.config) Затем вы можете ограничить разрешения на веб-сервере, что эта учетная запись может и не может сделать. Затем вы можете предоставить этой учетной записи необходимые разрешения на сервере SQL.

Ответ 3

У меня была такая же проблема и я решил эту проблему, изменив пул приложений.

Ответ 4

В случае, если это помогает кому-то, в web.config я добавил < identity impersonate = "false" /" > , чтобы эта ошибка ушла (под < system. web > )

Ответ 5

Вместо использования Integrated Security=True; в строке подключения просто используйте аутентификацию имени пользователя и пароля user=sa; pwd=mypassword;

Ответ 6

Простое решение - проверить файл web.config и убедиться, что один из них является частью строки подключения db:

Доверенное соединение = false

ИЛИ

Интегрированная безопасность = True

Ответ 7

Эта проблема отображается при восстановлении новой базы данных в вашей последней базе данных.

Чтобы решить эту проблему, вы должны перейти в sqlserver, затем в систему безопасности, а затем снова установить свой Apppool.