我有一个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日志中看到“连接成功”...