1

解決しようとしているちょっと変わった問題があります。Macで開発しています。jdbc を使用してデータベースに接続するコードを書いています。私は db サーバーに直接アクセスできません。アクセスするには、ssh でポート転送を設定する必要があります。これは、db サーバーが存在するネットワーク内のプロキシ サーバーに接続されます。私がプロキシするサーバーは Linux サーバーであり、データベースは Windows 上の MS Sql サーバーです。ポート転送を設定したら、SquirrelSQL などの DB ブラウジング ツールを使用してデータベースに接続できます。まったく同じ JDBC ドライバーを使用して、作成した jdbc コードを使用してデータベースに接続しようとすると、次のようになります。

Exception in thread "main" java.sql.SQLException: I/O Error: GSS Failed: Invalid name provided (Mechanism level: Cannot locate default realm)
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:654)
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:371)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:233)
    at sql.generator.SQLGenerator.main(SQLGenerator.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.io.IOException: GSS Failed: Invalid name provided (Mechanism level: Cannot locate default realm)
    at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.java:1976)
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:617)
    ... 10 more

Google での調査によると、これは Kerberos の問題である可能性があり、これまで対処する必要はありませんでしたが、それが正しいかどうかはわかりません。アプリケーションで複製する必要があるdbブラウザは何をしていますか?

ティア、アレックス

4

1 に答える 1

0

これも私を噛んだ。DriverManager.getConnection の呼び出しを確認してください。2 番目の引数としてプロパティを取るバリアントを使用していました。しかし、jTDS は M$ ドライバーと同じようには使用しません。URL、ユーザー名、およびパスワード引数でバリアントを使用する必要があります。ポート番号と (オプションで) データベース名を接続 URL に必ず追加してください。

于 2015-10-04T16:02:32.673 に答える