我有一个不寻常的问题,我试图解决。我在Mac上开发。我正在编写一些使用jdbc连接到数据库的代码。我无法直接访问数据库服务器 - 为了实现它,我必须在ssh上设置端口转发,该转发将转到数据库服务器所在的网络中的代理服务器。我代理的服务器是Linux服务器,db是Windows上的MS Sql Server。一旦我设置了portforwarding,我就可以使用像SquirrelSQL这样的数据库浏览工具连接到数据库。当我尝试使用我编写的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
对谷歌的研究表明它可能是一个Kerberos问题,我以前没有必要合作,但我不确定是对的。什么是我需要在应用程序中复制的数据库浏览器?
TIA, 亚历
答案 0 :(得分:0)
这也是我的一点。检查您的DriverManager.getConnection调用。我一直在使用将Properties作为第二个参数的变体。但是jTDS并没有像M $驱动程序那样使用它。您必须使用带有URL,用户名和密码参数的变体。确保将端口号和(可选)数据库名称添加到连接URL。