мой веб-сервис не может войти в локальную базу данных - PullRequest
2 голосов
/ 01 мая 2009

я сделал веб-сервис, у него есть два веб-метода, один метод использует файл XML для получения данных, а другой использует базу данных на моем компьютере, первый метод работает нормально, но когда я вызываю второй метод с использованием объект веб-сервиса из моей страницы aspx, я получаю нижеупомянутое исключение, я новичок в этом и потратил много времени на решение проблемы, поэтому теперь хочу получить помощь от вашего опыта ..

System.Data.SqlClient.SqlException: Ошибка входа пользователя 'D-11083 \ ASPNET'. в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin (Boolean enlistOK) в System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) в System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover (String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
в System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist (SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) в System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity идентичность, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) в System.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions параметры, объект poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) в System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection, DbConnectionPoolGroup poolGroup) в System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) в System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection externalConnection, DbConnectionFactory connectionFactory) в System.Data.SqlClient.SqlConnection.Open () в BLL.BLLclass.get_zodiac_dll (DateTime твоя дата) в c: \ WebSite7 \ App_Code \ BLL.cs: строка 58
в BLL.BLLclass.get_zodiac_bll (DateTime твоя дата) в c: \ WebSite7 \ App_Code \ BLL.cs: строка 73
на Service.get_zodiac (DateTime date) в C: \ WebSite7 \ App_Code \ Service.cs: линия 29

примечание: d-11083 - это имя моего компьютера, и в строках, где упоминается ошибка, они возвращают вывод

Ответы [ 4 ]

1 голос
/ 01 мая 2009

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

Разрешает ли sql server проверку подлинности Windows? Эта конкретная учетная запись авторизована?

Возможно, вы не хотите, чтобы пользователь ASPNET получал доступ к базе данных как таковой, но вы можете заставить его выдавать себя за другого пользователя в целях доступа к базе данных, поместив что-то подобное в web.config

<identity impersonate="true" userName="domain\username" password="passwordgoeshere"/>
1 голос
/ 01 мая 2009

В строке подключения необходимо указать и имя пользователя, и пароль пользователя, который имеет соответствующий доступ к базе данных. Для тестирования вы можете временно включить учетную запись SA и использовать проверку подлинности SQL Server, чтобы упростить эту задачу. Прямо сейчас вы пытаетесь войти с контекстом пользователя ASPNET, который, вероятно, не имеет (и не должен) иметь доступ к вашей базе данных.

0 голосов
/ 01 мая 2009

С помощью аутентификации Windows ваш пользователь проходит аутентификацию в веб-сервисе с использованием аутентификации Windows. Это не означает, что веб-сервис может использовать учетные данные пользователя для аутентификации на сервере SQL. То, что вы ищете, это олицетворение.

Ваш SQL-сервер находится на том же компьютере, что и веб-служба? В этом случае вы должны быть в порядке с обычным подражанием. В MSDN есть хорошая статья об олицетворении в ASP.Net. В общем, все, что вам нужно сделать, это добавить

<identity impersonate="true" />

в Web.config веб-службы. Это запустит код веб-службы от имени пользователя и позволит серверу SQL проходить аутентификацию с использованием контекста пользователя.

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

По крайней мере, так в теории. Я провел несколько дней, пытаясь заставить делегацию работать в WCF безуспешно.

Как только вы включили олицетворение, вы можете использовать WindowsIdentity, чтобы увидеть, какой уровень олицетворения используется.

System.Security.Principal.WindowsIdentity.GetCurrent().ImpersonationLevel

Если это возвращает олицетворение, вы можете аутентифицироваться в процессах на локальном компьютере, используя идентификационные данные пользователя. Если это возвращает делегирование, вы можете проходить аутентификацию на других компьютерах, используя идентификационные данные пользователя.

0 голосов
/ 01 мая 2009

Процесс ASPnet пытается войти в систему с идентификатором пользователя «D-11083 \ ASPNET». Разрешен ли этот пользователь в базу данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...