2009-08-13 3 views
13

Мое ASP.NET v3.5 веб-приложение бросает следующее исключение, когда пытается открыть соединение с SQL Server 2008 баз данных:Ошибка входа в систему пользователя «NT AUTHORITY IUSR» в ASP.NET и SQL Server 2008

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

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

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

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

ответ

6

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

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

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

+1

Я просто тестирование, чтобы увидеть, если это будет все работать на том же поле - в производстве топологии лучше всего описывается как растягивание. Во всяком случае, вы прибили его - мне пришлось добавить разрешения для machineName $. Спасибо! –

+1

Просто хотел добавить это аналогично, я решил эту проблему, создав разрешения для имени пользователя IUSER, найденного в веб-сайтах IIS 6.0 -> Свойства-> Безопасность каталога -> Изменить (Аутентификация ...), которая была IUSR_MACHINENAME – shawad

+0

. Как вы добавили разрешения для MachineName $ в VS –

1

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

-1

Самое простое решение, чтобы проверить файл web.config и убедитесь, что один из них является частью строки подключения к БД:

Trusted Connection = ложь

ИЛИ

Integrated Security = True

1

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

-2

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

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

1

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

0

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

+0

Нет! Вы не можете рекомендовать использовать имя пользователя и пароль, когда есть другой вариант использования, например авторизация с учетной записью машины. –

 Смежные вопросы

  • Нет связанных вопросов^_^