我正在编写一个需要连接到SQL服务器以检索某些信息的Windows服务。但是,服务器不允许我连接:login failed for user [domain/username]
。奇怪的是,SSMS内部的一切都运行得很好。我可以登录,查询数据库,一切都很完美。只有通过Windows服务才会抛出错误。
供参考,这是我正在使用的连接字符串:
Data Source = sqlserveraddresshere; Initial Catalog = databasenamehere; User ID = domain \ username; Password = password`
我怀疑这是否相关,但是当我尝试使用集成安全性时,它会获取我的计算机名称而不是我自己的用户名。我99%肯定这是因为我们的防病毒和监控软件在我的Windows会话之上欺骗管理员用户来完成它的工作。无论如何,只要输入正确的用户名和密码就行了,对吗?
我看了一些涉及相同错误的其他问题,但它们都是无关的。据我所知,每个可以通过SSMS进入的人都可以通过代码访问他们的SQL服务器。这是我能找到的最相似的问题,尽管它没有多大帮助: Can't connect to SQL Server: "Login failed for user "."
另外,在你问之前,我已经为TYPOS检查了。实际上,我甚至试图使用其他用户的帐户来确保我的权限不会出现任何问题。如果您需要我发布任何代码,请告诉我。谢谢你的帮助!
更新:
我更改了服务帐户并切换回IntegratedSecurity = true
。似乎有些事情发生了变化,因为现在我收到了一个稍微不同的错误:
无法打开登录请求的数据库“mydatabase”。登录失败。 >用户'MYDOMAIN \ myUserName'登录失败。
答案 0 :(得分:7)
它正在运作!终于来了!
首先,使用Kevin的建议(原始问题下面的评论),我检查了SQL Server日志(在Management Studio中,展开服务器,展开管理,展开SQL Server日志)。这就是我发现更冗长的错误报告,帮助我诊断问题的方法。
事实证明服务器不允许除Windows身份验证之外的任何其他内容,因此我尝试手动输入UN / PW失败了。
但是,我仍然遇到服务器将我的机器名称作为用户而不是用户名传递的问题。通过Duncan's suggestion将服务运行的用户更改为我的名称(右键单击Services-> Properties-> Log On选项卡)修复此问题。
感谢大家的帮助,非常感谢。
答案 1 :(得分:2)
您需要检查运行该服务的用户帐户。通过它的运行声音Local System
,它将尝试通过机器名称作为登录。
尝试将此更改为权限最低的域用户(或进行测试,您可以使用自己的帐户),然后授予该用户登录SQL Server的权限。这应该可以解决问题。
答案 2 :(得分:0)
您要传递给SQL Server登录的用户名是什么?根据连接字符串,看起来您使用文字“域\用户名”作为用户。密码应更新为正确的密码,而不是文字“密码”。
当我开始编写C#编写数据库支持的应用程序时,我得到了这个错误。我的应用程序有一个混合模式环境,我传递SQL Server用户名和密码,而不是我用来登录计算机的用户名和密码。这是我要强制执行的安全策略,以便数据库控制可以登录的用户以及他们获得的权限。这适合你想要做的事情吗?如果是这样,我也许可以提供更好的帮助,以及更具体的代码。