2012-06-25 26 views
5

我在写一个需要连接到SQL服务器以检索一些信息的Windows服务。但是,服务器不允许我连接:login failed for user [domain/username]。奇怪的是,SSMS内部的一切都完好无损。我可以登录,查询数据库,并且一切都完美无缺。只有通过Windows服务才会抛出该错误。对于Windows服务SQL“登录失败,用户[用户名]”错误,但SSMS登录工程

仅供参考,这里是我使用的连接字符串:

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。其实,我甚至试图使用其他用户的帐户,以确保我的权限没有什么奇怪的事情发生。如果你需要我发布任何代码,请告诉我。谢谢你的帮助!

UPDATE:

我改变了账户服务和切换回IntegratedSecurity = true。这似乎是有所改变,因为现在我收到一个稍微不同的错误:

Cannot open database "mydatabase" requested by the login. The login failed. >Login failed for user 'MYDOMAIN\myUserName'.

+4

您可以检查SQL事件日志(在Management Studio中,展开服务器,展开管理,展开SQL Server日志),并为我们提供失败登录的完整错误?它应该包含错误编号,严重性和状态。 –

+0

检查SQL事件日志帮助我了解了一些新内容:我尝试访问的服务器仅配置了Windows身份验证。但是,当我使用WA时登录仍然失败,因为它仍然发送我的计算机名称而不是帐户名称。我会做更多的研究来尝试解决这个问题。 以下是完整的错误(带有匿名凭据):用户'DOMAIN \ MACHINE_NAME $'失败。原因:基于令牌的服务器访问验证因基础结构错误而失败。检查以前的错误。 [客户端:10.1.0.188] – VVander

+0

错误是否在您发布的消息上面有严重性**和**状态**值? –

回答

6

它的工作!最后!

首先,使用Kevin的建议(原始问题下的注释),我检查了SQL Server日志(在Management Studio中,展开服务器,展开管理,展开SQL Server日志)。这是我发现更冗长的错误报告,帮助我诊断问题。

事实证明,服务器不允许除Windows身份验证之外的任何内容,所以这就是我尝试手动输入UN/PW失败的原因。

但是,我仍然有服务器传递我的机器名称作为用户而不是我的用户名的问题。用Duncan's suggestion修改了服务运行的用户名称(右键单击Services-> Properties-> Log On Tab),修复了这个问题。

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

+0

要添加到VVander的答案,请在登录选项卡上选择“此帐户”单选按钮,然后单击浏览。输入“你的名字”,系统将执行AD搜索以认证用户名。然后输入你的系统密码并申请。您应该收到类似“系统接受此服务的用户名/密码”的消息。而已。它会工作。 – bluwater2001

0

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

当我开始编写C#编写数据库支持的应用程序时,我得到了这个错误。我的应用程序有一个混合模式环境,并且我传递了SQL Server用户名和密码,而不是用于登录到我的计算机的内容。这是我喜欢强制执行的安全策略,以便数据库控制可以登录的用户以及他们获得的权限。这是否适合你想要做的?如果是这样,我可能会提供更好的帮助,以及更具体的代码。

+0

对不起,如果我没有在原始问题中说清楚。发布之前,我更改了连接字符串中的值。在我的程序中,我实际上使用了应该有权访问服务器的用户名和密码。 – VVander

+0

当我今晚回家时,我会发布我的连接字符串,我用我的应用程序。它被设置为使用SQL Server身份验证,但我认为它应该作为任何类型身份验证的起始模型。 – EastOfJupiter

+0

谢谢,任何帮助表示赞赏。虽然我一直在使用connectionstring.com的例子以及在.NET中使用MS的ConnectionStringBuilder类,但是如果你的字符串不同,它可能会有所帮助。 – VVander

2

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

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

+0

好的,我更改了服务的帐户,并切换回IntegratedSecurity = true。它似乎有些变化,因为现在我收到一个稍微不同的错误: 无法打开登录所请求的数据库“mydatabase”。登录失败。用户'MYDOMAIN \ myUserName'登录失败。 我也将这个添加到原始问题中。 – VVander

+0

您可能需要为登录创建一个数据库用户。右键单击SSMS中对象资源管理器中的登录,然后检查左侧窗格中的用户映射。或者,您可以针对数据库运行'CREATE USER [blah] FOR LOGIN [login]' –

+0

最后我发现我输入的数据库名称错误,这就是为什么您的建议一开始并不奏效,并给了我这个错误。这虽然可以帮助其他人。 – VVander