Как я могу подключиться к базе данных на другой виртуальной машине через WCF? - PullRequest
2 голосов
/ 15 февраля 2011

У нас есть служба WCF, которая используется для подключения к базе данных на том же компьютере. С тех пор мы перенесли и базу данных, и службу на разные машины (обе виртуальные машины в одном физическом окне, которые могут видеть друг друга).

Я установил стандартный вход в Windows на компьютере базы данных (WCFServiceLogin), добавил в базу данных вход в базу данных, указывающий на этот вход в Windows, добавил пользователя SQL в базу данных, которая указывает на этот вход в базу данных, и изменил Строка подключения в настройках проекта Visual Studio:

Data Source=NewServer;Initial Catalog=MyDB;Integrated Security=True;
UserID=WCFServiceLogin;Password=password

Когда я пытаюсь сделать звонок, который касается базы данных, я получаю эту ошибку:

Ошибка входа пользователя NT ВЛАСТЬ \ АНОНИМНЫЙ ЛОГОН '.

Как я могу заставить мои операции WCF успешно читать из базы данных на новом компьютере, используя правильный логин?

Обновление

Думаю, мне удалось продвинуться немного дальше. Я создал имя для входа WCFServiceLogin на компьютере, на котором работает служба с тем же паролем, что и ее аналог на NewServer. Затем я настроил службу WCF для работы с этим именем входа, изменил имя входа SQL для использования проверки подлинности Windows и удалил идентификатор пользователя и пароль из строки подключения. Наконец, я запустил exec sp_grantlogin 'NewServer \ WCFServiceLogin'.

Теперь я получаю эту ошибку:

Не удалось открыть базу данных "MyDB" запрошено по логину. Ошибка входа Авторизоваться не удалось для пользователя 'NewServer \ WCFServiceLogin'.

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

1 Ответ

1 голос
/ 15 февраля 2011

Ошибка указывает, что служба не использует учетные данные WCFServiceLogin.

Если служба WCF работает под управлением IIS, убедитесь, что для пула приложений задан идентификатор WCFServiceLogin.В противном случае убедитесь, что приложение / служба, выполняющая службу WCF, работает с учетными данными WCFServiceLogin.

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

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

РЕДАКТИРОВАТЬ:

Чтобы уточнить, встроенная проверка подлинности использует учетную запись Windows (домен активного каталога или компьютера) для входа в систему.Строка подключения использует интегрированный = true, как и в вашем вопросе.Вы не должны иметь поля имени пользователя и пароля в этом случае.Соединение будет использовать учетные данные, под которыми запущен процесс.

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

Возможное решение - создать учетную запись проверки подлинности SQL - это учетная запись, созданная в SQL и не сопоставленная с именем пользователя Windows.Укажите имя пользователя и пароль в строке подключения и удалите встроенную защиту = true.

Если у вас нет активного каталога, тогда будет работать аутентификация SQL.

Надеюсь, это прояснит разницу и почему встроенная защита не будет работать с учетной записью пользователя компьютера.

ОБНОВЛЕНИЕ:

Сообщение об ошибке указывает, что БД все еще не может аутентифицироваться с использованием учетной записи newserver \ WCFServiceLogin, как и на другой машине.

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