Ошибка доступа к SQL Server из веб-службы ASMX

Я обращаюсь к своему серверу через подключение к удаленному рабочему столу и настроил веб-сервис в IIS. Я могу видеть методы, но когда я нажимаю кнопку «Вызвать», я получаю следующую ошибку:

System.Data.SqlClient.SqlException: Ошибка входа для пользователя "SOLDev\Server02$". в ShareWare.Web.Service.WebAPI.Reservation.GetInfo()

Почему он использует имя машины в качестве пользователя? Мой пользователь проверки подлинности Windows — User1Dev. Также моя безопасность каталога в IIS настроена следующим образом:

  1. Опция «Включить анонимный доступ» — отключена
  2. Опция «Встроенная проверка подлинности Windows» — отмечена флажком.

Я использую .NET framework 2.0


person Tony    schedule 21.10.2009    source источник
comment
Немного подробностей, пожалуйста?   -  person John Saunders    schedule 22.10.2009
comment
Среди прочего, возникает ли проблема, когда вы не используете удаленный рабочий стол? Это происходит, когда вы не используете кнопку Invoke?   -  person John Saunders    schedule 22.10.2009


Ответы (2)


Это связано с тем, что веб-служба работает как идентификатор сетевой службы, а не как пользователь, вошедший в систему. Возможно, вам также понадобится <identity impersonate="true" /> в веб-конфигурации, если вы планируете использовать учетные данные пользователя для подключения к SQL Server.

person tvanfosson    schedule 21.10.2009
comment
Я думаю, что необходимо упомянуть, что нужно было поместить эту строку кода: Для этого вы можете вставить элемент ‹identity› в web.config следующим образом: ‹configuration› ‹system.web› ‹!-- где угодно внутри system.web --› ‹identity impersonate=true userName=xx password=xx/› - person Tony; 22.10.2009

Ваша веб-служба подключается к SQL, используя проверку подлинности Windows в качестве принципала, запускающего службу. В этом случае это будет BUILTIN\System или BUILTIN\Network Service, оба из которых аутентифицируются в домене как учетная запись компьютера, т.е. «SOLDEV\Server02$», который соответствует машине с именем Server02 в домене SOLDEV.

Если вы хотите аутентифицироваться на SQL Server под своим собственным логином, то IIS должен передать информацию аутентификации в процессе, называемом ограниченным делегированием. См. Настройка Ограниченное делегирование для Kerberos (IIS 6.0). или Как: использовать Смена протокола и ограниченное делегирование в ASP.NET 2.0.

Если вы хотите, чтобы веб-служба аутентифицировалась в SQL Server как она сама, вы должны предоставить разрешение на вход субъекту веб-службы в SQL: CREATE LOGIN [SOLDEV\Server02$] FROM WINDOWS.

person Remus Rusanu    schedule 21.10.2009