Служба WCF не может войти в удаленную базу данных - PullRequest
3 голосов
/ 15 августа 2011

У меня есть служба WCF, которая размещена в службе Windows.Эта служба Windows настроена для работы в качестве локальной системы.Этот WCF пытается войти в удаленную базу данных SQL Server 2008 Express, но не удается войти в систему.

Ошибка исключительной ситуации:

Невозможно открыть базу данных \ "{имя базы данных} \" запрошенопо логину.Ошибка входаНе удалось войти в систему для пользователя '{имя домена} \ {имя компьютера} $'.

Я заменил имена базы данных, домена и компьютера тегами, но вы поняли.

Есть идеи, как мне это решить?Я думал о добавлении этого пользователя в логины SQL Server, но не могу найти этого пользователя в его свойствах.

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

Я бы предложил создать новую учетную запись пользователя на сервере sql, а затем олицетворять эту учетную запись из службы Windows.

В классе WindowsIdentity есть много конструкторов, которые можно использовать для создания WindowsIdentity пользователя, которого выожидается, что SQL-сервер разрешит вход в систему (http://msdn.microsoft.com/en-us/library/e599ywa6.aspx).

. Вы пытались изменить пользователя потока на пользователя, распознаваемого SQL-сервером как допустимого пользователя, с помощью метода WindowsIdentity.Impersonate?

IЯ полагаю, что вы поместили бы код для олицетворения пользователя в классе обслуживания, который размещается в службе Windows, а не в клиентском коде, обращающемся к службе.

Подробнее и пример см. в http://msdn.microsoft.com/en-us/library/w070t6ka.aspx

Сохраните информацию для входа в зашифрованный файл конфигурации приложения. В сервисном проекте создайте файл app.config. В этом файле добавьте раздел для конфиденциальной информации (вначале в виде простого текста) и после сохранения сохраните файл в зашифрованном виде..

Подробности здесь: http://msdn.microsoft.com/en-us/library/89211k9b(v=VS.100).aspx и краткий обзор здесь: http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx

1 голос
/ 15 августа 2011

Сообщение

'The login failed. Login failed for user '{domain name}{machine name}$'

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

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

0 голосов
/ 15 августа 2011

Почему бы не создать собственный логин SQL Server для этой программы?Таким образом, не будет иметь значения, с кем вы запускаете службу, вы получите последовательные результаты.

...