Ошибка SQL "login failed for user [username]" для службы windows, но SSMS login работает

Я пишу службу windows, которая должна подключиться к SQL server для получения некоторой информации. Однако, сервер не позволяет мне подключиться: login failed for user [domain/username]. Странная часть заключается в том, что все работает совершенно нормально изнутри SSMS. Я могу войти в систему, запросить базу данных, и все работает отлично. Это только через службу windows, что он бросает эту ошибку.

для справки, вот строка подключения, которую я использую:

сведения Источник=sqlserveraddresshere; начальный каталог=databasenamehere; идентификатор пользователя=доменимя пользователя; пароль=пароль'

Я сомневаюсь, что это связано, но когда я пытаюсь использовать Integrated Security, он получает имя моего компьютера вместо моего собственного имени пользователя. Я на 99% уверен, что это потому, что наш антивирус и программное обеспечение для мониторинга подменяет пользователя администратора поверх моего сеанса windows, чтобы сделать свою работу. В любом случае, просто ввод правильного имени пользователя и пароля должен работать независимо, правильно?

Я взглянул на некоторые другие вопросы, связанные с той же ошибкой, но все они не были связаны. Из того, что я могу сказать, каждый, кто может войти через SSMS, также может получить доступ к своему SQL server через код. Это самый похожий вопрос, который я мог найти, хотя это не очень помогло: не удается подключиться к SQL Server: "ошибка входа пользователя"."

кроме того, прежде чем вы спросите, я уже проверил опечатки. На самом деле, я даже пытался использовать другого пользователя учетные записи, чтобы убедиться, что с моими разрешениями не происходит что-то фанковое. Если вам нужно отправить какой-либо код, дайте мне знать. Спасибо за помощь!

обновление:

Я изменил учетную запись для службы и переключился обратно на IntegratedSecurity = true. Кажется, что-то изменилось, потому что теперь я получаю немного другую ошибку:

не удается открыть базу данных "mydatabase", запрошенную логином. Ошибка входа в систему. >Ошибка входа пользователя "MYDOMAINmyUserName".

3 ответов


Это работает! Наконец-то!

во-первых, используя предложение Кевина (комментарий под исходным вопросом), я проверил журналы SQL Server (в Management Studio разверните сервер, разверните управление, разверните журналы SQL Server). Вот как я нашел более длинные отчеты об ошибках, которые помогли мне диагностировать проблему.

оказывается, сервер не разрешал ничего, кроме проверки подлинности Windows, поэтому мои попытки ввода UN/PW вручную не увенчались успехом.

однако у меня все еще была проблема, когда сервер передавал мое имя машины как пользователя вместо моего имени пользователя. Это было исправлено с Дункан предложение изменения пользователя, под которым работает служба, на мое имя (щелкните правой кнопкой мыши на вкладке службы->свойства->вход).

спасибо всем за помощь, очень признателен.


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

попробуйте изменить это на наименее привилегированного пользователя домена (или для тестирования вы можете использовать свою собственную учетную запись), а затем предоставить этому пользователю вход в SQL Server. Это должно сработать.


какое имя пользователя вы передаете SQL Server для входа в систему? Согласно строке подключения, похоже, что вы используете литерал "домен\имя пользователя" в качестве пользователя. Пароль должен быть обновлен, чтобы быть правильным паролем вместо буквального "пароль".

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