Java GSS/JDBC 问题

标签 java sql-server jdbc jtds jgss

我正在尝试解决一个不寻常的问题。我在 Mac 上开发。我正在编写一些使用 jdbc 连接到数据库的代码。我无法直接访问数据库服务器 - 要访问它,我必须在 ssh 上设置端口转发,该端口转发到数据库服务器所在网络中的代理服务器。我代理的服务器是 Linux 服务器,数据库是 Windows 上的 MS Sql Server。设置端口转发后,我可以使用 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

Google 上的研究表明这可能是 Kerberos 问题,我以前没有遇到过这个问题,但我不确定这是正确的。我需要在应用程序中复制的数据库浏览器正在做什么?

TIA, 亚历克斯

最佳答案

这个也咬了我。检查您的 DriverManager.getConnection 调用。我一直在使用将 Properties 作为第二个参数的变体。但 jTDS 的使用方式与 M$ 驱动程序的使用方式不同。您必须使用带有 URL、用户名和密码参数的变体。确保将端口号和(可选)数据库名称添加到连接 URL。

关于Java GSS/JDBC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796156/

相关文章:

sql - 检查行是否存在,否则插入

java - 自定义 java.sql.Driver 实现连接处理

java - 如何将 session ID 作为 Soap 请求的一部分传递?

java - android 获取adMob高度

sql - 帮助使用几个外键进行 SQL 查询

mysql - 如何使用 JDBC 中的文本字段值更新数据库?

java - Spring Boot JPA/JDBC 批处理 findById 有效,但 findOneByX 不起作用

java - 带有 JPopupMenu 的 JComboBox 作为右键单击选项

Java 仿射变换

sql-server - SQL Server 跟踪中如何报告对临时表的插入