7

我正在编写一个需要连接到 SQL 服务器以检索一些信息的 Windows 服务。但是,服务器不允许我连接:login failed for user [domain/username]. 奇怪的是,在 SSMS 内部一切正常。我可以登录,查询数据库,一切都很顺利。只有通过 Windows 服务,它才会抛出该错误。

作为参考,这是我正在使用的连接字符串:

数据源=sqlserveraddresshere;初始目录=databasenamehere;用户ID=域\用户名;密码=密码`

我怀疑这是相关的,但是当我尝试使用集成安全时,它得到的是我的计算机名而不是我自己的用户名。我 99% 确定这是因为我们的防病毒和监控软件在我的 Windows 会话之上欺骗管理员用户来完成其工作。无论如何,只要输入正确的用户名和密码就可以了,对吧?

我看了一些其他涉及相同错误的问题,但它们都是不相关的。据我所知,每个可以通过 SSMS 进入的人也可以通过代码访问他们的 SQL 服务器。这是我能找到的最相似的问题,虽然没有多大帮助: 无法连接到 SQL Server:“用户登录失败”。

另外,在你问之前,我已经检查了错别字。实际上,我什至尝试使用其他用户的帐户来确保我的权限不会发生任何奇怪的事情。如果您需要我发布任何代码,请告诉我。谢谢你的帮助!

更新:

我更改了该服务的帐户并切换回IntegratedSecurity = true. 似乎有些事情发生了变化,因为现在我收到了一个稍微不同的错误:

无法打开登录请求的数据库“mydatabase”。登录失败。>用户“MYDOMAIN\myUserName”登录失败。

4

3 回答 3

9

它正在工作!最后!

首先,使用 Kevin 的建议(在原始问题下方进行评论),我检查了 SQL Server 日志(在 Management Studio 中,展开服务器、展开Management、展开SQL Server Logs)。这就是我如何找到更冗长的错误报告来帮助我诊断问题的方式。

原来服务器不允许 Windows 身份验证以外的任何东西,所以这就是我尝试手动输入 UN/PW 失败的原因。

但是,我仍然遇到服务器将我的机器名称作为用户而不是我的用户名传递的问题。邓肯建议将运行该服务的用户更改为我的名字(右键单击“服务”->“属性”->“登录选项卡”),从而解决了这个问题。

感谢大家的帮助,非常感谢。

于 2012-06-26T15:22:54.447 回答
2

您需要检查运行服务的用户帐户。通过它正在运行的声音,Local System它将尝试将机器名称作为登录名传递。

尝试将其更改为最低权限的域用户(或者为了测试,您可以使用自己的帐户),然后授予该用户登录 SQL Server 的权限。这应该够了吧。

于 2012-06-25T22:14:49.060 回答
0

您传递给 SQL Server 以登录的用户名是什么?根据连接字符串,您似乎正在使用文字“域\用户名”作为用户。密码应更新为正确的密码,而不是文字“密码”。

当我开始用 C# 编写数据库支持的应用程序时,我遇到了很多这个错误。我的应用程序有一个混合模式环境,我传递了 SQL Server 用户名和密码,而不是我用来登录计算机的用户名和密码。这是我喜欢强制执行的安全策略,以便数据库控制谁可以登录以及他们获得什么权限。这是否适合您正在尝试做的事情?如果是这样,我也许可以提供更好的帮助,以及更具体的代码。

于 2012-06-25T21:57:35.907 回答