【发布时间】:2015-12-10 19:21:42
【问题描述】:
我在 Windows 身份验证模式下使用默认实例设置 MS SQL。我还使用ServerSpn 作为 MSSQlSvc 实现了 Kerberos。
我正在尝试从 Windows 操作系统上的 Java 客户端远程访问 SQL Server。
Java 客户端使用以下 JVM 参数执行:
-Djava.security.auth.login.config=path_to_file/client.conf
-Djava.security.krb5.conf=path_to_file/krb5.ini
我使用的网址如下所示:
jdbc:sqlserver://MSSQLSvc/FQDN_OF_SQL_Server:PORT;integratedSecurity=true;authenticationScheme=JavaKerberos
但我收到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: TCP/IP 连接 到主机 MSSQLSvc/FQDN_OF_SQL_Server,端口 1433 失败。错误:“空。 验证连接属性。确保 SQL 实例 服务器正在主机上运行并接受 TCP/IP 连接 港口。确保到端口的 TCP 连接没有被 防火墙。”。在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191) 在 com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:242) 在 com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2293) 在 com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:506) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1523) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1204) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1040) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:554) 在 com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1019) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 microsoftJdbcDriver.getConnection(microsoftJdbcDriver.java:32) 在 microsoftJdbcDriver.displayDbProperties(microsoftJdbcDriver.java:51) 在 microsoftJdbcDriver.main(microsoftJdbcDriver.java:93)
client.conf 文件:
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
};
kb5.ini:
[libdefaults]
default_realm = MYDOMAIN.COM
clockskew = 300
[realms]
MYDOMAIN.COM = {
kdc = MYDOMAIN.COM
admin_server = MYDOMAIN.COM
}
[domain_realm]
.domain.com = MYDOMAIN.COM
domain.com> = <MYDOMAIN.COM
[appdefaults]
autologin = true
forward = true
forwardable = true
encrypt = true'
另请注意:
- 防火墙不是问题,同样的东西在本机上也能正常工作
身份验证,使用
sql_auth.dll。 - SQL Management Studio 也可以访问实例
【问题讨论】:
-
既然你在 Windows 上,为什么不使用 DLL 的 SSPI 实现。它应该更容易。
-
我正在寻找一个同样适用于非 Windows 客户端的解决方案。稍加修改。进行迭代。 windows 到 windows - 本机身份验证工作,现在尝试 kerberos windows 到 windows,然后是 linux 到 windows。
标签: java sql-server jdbc kerberos