SqlException: сбой входа для пользователя 'NT AUTHORITY \ NETWORK SERVICE - PullRequest
10 голосов
/ 19 мая 2009


Когда я запускаю веб-приложение через VS 2008, приложение может войти на сервер Sql и проверить учетные данные (имя пользователя и пароль), введенные пользователем, но когда я просматриваю это приложение через IIS 7 и пытаюсь выполнить обратную передачу пользователя имя и пароль, приложение сообщает об исключении:

System.Data.SqlClient.SqlException: сбой входа для пользователя 'NT AUTHORITY \ NETWORK SERVICE'

  • В IIS 7 каждый процесс выполняется под учетной записью Сетевая служба . Итак, какие права необходимо назначить этой учетной записи, чтобы приложение могло «связываться» с сервером Sql?


1019 * спасибо *


EDIT:

Здравствуйте,


Теперь это работает, хотя я не понимаю, зачем учетной записи машины нужны эти права. Я понимаю, что учетная запись компьютера нуждается в некоторых правах, чтобы иметь возможность «общаться» с определенной программой (сервер Sql), но зачем ей нужны права на доступ к базе данных и ее таблицам? Разве это не до учетной записи, указанной в строке подключения

<add name="MyConnection" connectionString="data source=localhost; integrated security=sspi; initial catalog=aspnetdb;" />

иметь соответствующие права доступа к базе данных и ее таблицам?

Ответы [ 7 ]

19 голосов
/ 19 мая 2009

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

Вы можете сделать все это в SSMS через раздел «Безопасность», щелкнуть правой кнопкой мыши «Логины» и выбрать «Добавить». Вы будете добавлять учетную запись Windows, затем вы можете найти и подтвердить имя «NETWORK SERVICE». Затем перейдите в раздел «Сопоставление пользователей» и дайте разрешение на просмотр вашей базы данных. Разрешения, как я уже сказал, зависят от вас, или вы можете назначить им разрешения dbowner для полного контроля.

После этого все будет в порядке. Я предупреждаю против предоставления приложению больше разрешений, чем необходимо!

9 голосов
/ 19 мая 2009

Лично я бы запустил веб-приложение под учетной записью настраиваемой службы. Если вы действительно хотите запустить его в сетевой службе - , см. Этот документ MSDN .

8 голосов
/ 19 мая 2009

Поскольку вы указываете "встроенную защиту = sspi" в строке подключения, я предполагаю, что вы ожидаете олицетворения. Но для этого вам следует: 1. включить встроенную аутентификацию в IIS 2. включите аутентификацию windows в asp.net: 3. включите погружение в asp.net:

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

Итак, вы уже сказали, что лучше иметь отдельную учетную запись для соединений SQLSRV. Надеюсь, это поможет.

3 голосов
/ 19 мая 2009

Я рекомендую создать учетную запись службы и запустить процесс IIS 7 в качестве этой учетной записи. Убедитесь, что учетная запись имеет надлежащий доступ к БД (если она просто читает, то DB-REader) (если она читает и обновляет, то DB-Reader и DB-Writer).

2 голосов
/ 18 октября 2011

Я столкнулся с той же ошибкой при новой настройке IIS. Я использовал «встроенную безопасность = ложь; Идентификатор пользователя = sa; Пароль = ваш пароль», и все работало просто отлично.

1 голос
/ 29 октября 2011

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

Я расскажу о решении, которое работает всегда и очень просто.

Перейдите на SQL Server >> Безопасность >> Логины и щелкните правой кнопкой мыши NT AUTHORITY \ NETWORK SERVICE и выберите Свойства

В открывшемся окне «Свойства входа в систему» ​​перейдите на вкладку «Сопоставление пользователей». Затем на вкладке «Сопоставление пользователей» выберите нужную базу данных, особенно базу данных, для которой отображается это сообщение об ошибке. На нижнем экране проверьте роль db_owner. Нажмите ОК.

0 голосов
/ 04 февраля 2015

Я столкнулся с этой проблемой в проекте SharePoint. Встроенная защита была включена, и база данных уже была настроена для разрешения доступа пользователю пула приложений.

Проблема заключалась в том, что олицетворение было включено на , когда его нужно было отключить. Этот ответ привел меня в правильном направлении:

WindowsImpersonationContext noImpersonateContext = null;

try
{
    noImpersonateContext = WindowsIdentity.Impersonate(IntPtr.Zero);
    using (SqlConnection conn = CreateConnection())
    {
        // database calls...
    }
}
finally
{
    if (noImpersonateContext != null) noImpersonateContext.Undo();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...