7

LAN内の別のマシン上のSQLServer2008インスタンスに接続しようとするVisualStudioC ++プロジェクト(アンマネージC ++)があります。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を使用して(接続オプションでTCP / IPを指定して)SSMSを使用してユーザーIDmyDBUserとパスワードmyPasswordでそのインスタンスにリモートで正常に接続できます!また、ログインすると、データベースmyDBを正常にナビゲートできます。

はい、サーバーで混合モード認証を有効にしました。

また、インスタンスがローカルで、Windows認証を使用しているときに、同じコードが正常に接続されていたことにも注意してください。つまり、このすべてが最後に機能してから変更されたのは、サーバーを別のマシンに移動し、現在SQL認証を使用しているため、接続文字列を変更したことです。それ以外の場合、コードはまったく変更されていません。

SQLServer2008インスタンスのサーバーログに表示されるエラーメッセージは次のとおりです。

ユーザー"のログインに失敗しました。理由: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」に変更したところ、動作するようになりました。SQLServerログに「正常に接続されました」と表示されます...

4

3 に答える 3

9

SELECT SERVERPROPERTY('IsIntegratedSecurityOnly');1が返される場合は実行してみてください。0が混在している場合はWindows認証です。1が返された場合は、間違いなくWindows認証であり、他に何か問題があるはずです。

于 2013-02-13T22:21:52.663 に答える
2

答え: 接続文字列で、「ユーザー ID」を「uid」に、「パスワード」を「pwd」に変更しただけで、機能するようになりました。SQL Server ログに「正常に接続されました」と表示されるようになりました...

于 2013-03-02T21:30:34.413 に答える