我有一个 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 使用用户 id 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.)
我没有在上面的连接字符串中指定实例名称,因为我的实例安装为默认实例,而不是命名实例。
关于如何解决这个问题的任何想法?
更新:我似乎解决了这个问题。您准备好发现该错误消息是多么愚蠢和完全无关吗?在连接字符串中,我只是将“用户 ID”更改为“uid”,将“密码”更改为“pwd”,现在它可以工作了。我现在在我的 SQL Server 日志中看到“连接成功”...