Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL";用户[用户名]登录失败;windows服务出错,但SSMS登录有效_Sql Server_Authentication_Windows Services - Fatal编程技术网

Sql server SQL";用户[用户名]登录失败;windows服务出错,但SSMS登录有效

Sql server SQL";用户[用户名]登录失败;windows服务出错,但SSMS登录有效,sql-server,authentication,windows-services,Sql Server,Authentication,Windows Services,我正在编写一个windows服务,它需要连接到SQL server以检索一些信息。但是,服务器不允许我连接:用户[domain/username]登录失败。。奇怪的是,从SSM内部来看,一切都很好。我可以登录,查询数据库,一切都很顺利。只有通过windows服务才会抛出该错误 作为参考,以下是我使用的连接字符串: 数据源=sqlserveraddresshere;初始目录=此处的数据库名;用户ID=域\用户名;密码=密码` 我怀疑这是否有关联,但当我尝试使用集成安全性时,它会获取我的计算机名,而

我正在编写一个windows服务,它需要连接到SQL server以检索一些信息。但是,服务器不允许我连接:
用户[domain/username]登录失败。
。奇怪的是,从SSM内部来看,一切都很好。我可以登录,查询数据库,一切都很顺利。只有通过windows服务才会抛出该错误

作为参考,以下是我使用的连接字符串:

数据源=sqlserveraddresshere;初始目录=此处的数据库名;用户ID=域\用户名;密码=密码`

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

我看了一些涉及相同错误的其他问题,但它们都不相关。我可以告诉所有通过SSM进入的人,他们也可以通过代码访问SQL server。这是我能找到的最相似的问题,尽管没有多大帮助:

另外,在你问之前,我已经检查了打字错误。实际上,我甚至尝试使用其他用户的帐户来确保我的权限没有问题。如果你需要我发布任何代码,请告诉我。谢谢你的帮助

更新:

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

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


您要传递给SQL Server以进行登录的用户名是什么?根据连接字符串,看起来您正在使用文本“domain\username”作为用户。应将密码更新为正确的密码,而不是文字“password”


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

您需要检查运行该服务的用户帐户。听上去它是以
本地系统运行的
,该系统将尝试将机器名作为登录名传递给用户

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

它起作用了!终于

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

事实证明,服务器不允许Windows身份验证以外的任何操作,这就是我手动输入UN/PW失败的原因

但是,我仍然存在服务器将我的机器名作为用户而不是用户名传递的问题。通过将运行服务的用户更改为我的姓名(在“服务->属性->登录”选项卡中单击鼠标右键),可以修复此问题


感谢所有人的帮助,非常感谢。

请检查SQL事件日志(在Management Studio中,展开服务器,展开管理,展开SQL server日志),并向我们提供登录失败的完整错误信息?它应该包括错误号、严重性和状态。啊,检查SQL事件日志帮助我了解了一些新情况:我尝试访问的服务器仅配置为Windows身份验证。但是,当我使用WA时,登录仍然失败,因为它仍然发送我的机器名而不是帐户名。我现在会做更多的研究来解决这个问题。以下是完整错误(使用匿名凭据):用户“DOMAIN\MACHINE\u NAME$”失败。原因:基于令牌的服务器访问验证失败,出现基础结构错误。检查以前的错误。[客户端:10.1.0.188]错误的严重性和状态值是否高于您发布的消息?如果我在原始问题中没有明确说明,请原谅。在发布之前,我更改了连接字符串中的值。在我的程序中,我实际上使用了应该可以访问服务器的用户名和密码。今晚回家后,我会发布我在应用程序中使用的连接字符串。它设置为使用SQL Server身份验证,但我认为它应该作为任何类型身份验证的起始模型。谢谢,非常感谢您的帮助。虽然我一直在使用connectionstring.com的示例以及.NET中MS的ConnectionStringBuilder类,但如果您的字符串不同,它可能会有所帮助。根据我使用connectionstring.com(这是一个极好的资源)的经验,它们非常通用。我应该在中央时间6:00-6:30左右在这里吃点东西。顺便说一句,你打算使用Windows身份验证还是SQL Server身份验证?我现在使用Windows身份验证,因为我发现服务器只接受这一点。我终于把一切都弄明白了,所以我根本不需要你的帮助,不过还是要谢谢你。如果您感到好奇,我发布了解决方案作为答案。好的,我更改了该服务的帐户,并切换回IntegratedSecurity=true。看起来有点像