SQL Server 2008错误18456状态58,“登录失败,用户为“

7

我有一个Visual Studio C++项目(非托管C++),我尝试连接到LAN中另一台机器上的SQL Server 2008实例。我使用TCP/IP协议。我的连接字符串如下:

"DRIVER={SQL Server Native Client 10.0};Server=tcp:169.254.204.232,1433;Network Library=DBMSSOCN;Initial Catalog=myDB;User ID=myDBUser;Password=myPassword;"

重要事实:我能够成功地使用SSMS远程连接到该实例,使用的是用户名myDBUser和密码myPassword,使用SQL身份验证模式(在连接选项中指定TCP/IP)!此外,在登录后,我可以成功地导航到数据库myDB。

所以,是的,我已经在我的服务器上启用了混合模式身份验证。

还要注意的是,当我的实例是本地的并且我正在使用Windows身份验证时,相同的代码已经成功连接。换句话说,自从最后一次工作以来改变了什么,就是我将我的服务器移动到另一台机器上,现在正在使用SQL身份验证,因此改变了我的连接字符串 - 代码没有发生任何变化。

这是我在我的SQL Server 2008实例的服务器日志中收到的错误消息:

登录失败,用户为“”。原因:尝试使用SQL身份验证登录失败。服务器只配置为Windows身份验证。 错误:18456,严重性:14,状态:58。

请注意,该错误消息中引用的用户为空,即使在我的连接字符串中指定了非空用户ID。

其他连接字符串也尝试过,但结果相同:

"DRIVER={SQL Server Native Client 10.0};Server=MACHINE2;Database=myDB;User ID=myDBUser;Password=myPassword;" (where MACHINE2 is the windows name of the machine hosting the sql server instance.)

我在上面的连接字符串中没有指定实例名称,因为我的实例是安装为默认实例而不是具名实例。
有什么解决方法吗?
更新:我似乎解决了这个问题。你准备好知道这个错误信息有多么傻和完全无关了吗? 在连接字符串中,我只是将“User ID”更改为“uid”,“Password”更改为“pwd”,现在它可以工作了。 现在我在我的SQL Server日志中看到“连接成功”...

1
你声称已启用混合模式身份验证,但异常消息明确说明相反。更改身份验证模式后是否重新启动过?请参阅此帖子:https://dev59.com/fGoy5IYBdhLWcg3wnPOJ - Jacco
3个回答

9
尝试运行SELECT SERVERPROPERTY('IsIntegratedSecurityOnly');,如果返回1,则是Windows身份验证,如果返回0,则是混合身份验证。如果返回1,则绝对是Windows身份验证,必须有其他问题。

它返回0。如果我理解正确,这意味着我的服务器处于混合身份验证模式,正如我所期望/需要的那样? - Karl Arsenault
很好,SQL Server肯定是混合验证...密码是短的吗?你可以在数据库属性中取消强制密码策略,尽管你说你可以远程连接,如果该策略开启且密码较短,则不应该能够远程连接。 - David Aleu
另一个选项是在连接中不指定端口: 169.254.204.232 而不是 169.254.204.232,1433 - David Aleu
我假设您允许非受信任的连接(因为您可以远程登录),但您可以从 Studio Management 进行检查,右键单击服务器实例 > 属性 > 安全。 - David Aleu
谢谢大家的帮助。我解决了这个问题。请看一下我在原帖中的更新(我至少还需要5个小时才能回答自己的问题)。 - Karl Arsenault

6
我认为我通过以下步骤解决了这个问题...
在对象资源管理器中右键单击服务器名称 -> 属性 -> 安全性 -> 将服务器身份验证更改为SQL Server和Windows身份验证模式 -> 点击确定。
之后在对象资源管理器中打开服务器 -> 展开安全性 -> 展开登录 -> 右键单击您的登录名 -> 属性 -> 输入新密码 -> 确认密码 -> 点击确定。
然后断开SQL并重新启动系统。然后在SQL身份验证模式下使用更改后的密码登录SQL Server 2008。
谢谢 :)

2
答案是:在连接字符串中,我只是将“User ID”更改为“uid”,将“Password”更改为“pwd”,现在它可以工作了。我现在在我的SQL Server日志中看到“连接成功”的消息...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接