我们有一个行为类似于ETL工具的应用程序。用户可以提供连接属性,应用程序将使用提供的属性连接到数据库服务器。我的任务是调查它是否能够支持Kerberos身份验证(这意味着Kerberos崩溃,并尝试使应用程序正常工作)。虽然我可以使用一个数据库服务器和一个用户来执行此操作,但是现在的问题是如果我有多个数据库服务器并且使用不同的用户,该如何执行此操作。
到目前为止,我尝试创建一个简单的Java应用程序,该应用程序使用krb5.conf和login.config连接到数据库服务器(这样可以更快地测试/学习)。最终,我能够使其正常运行,并将我们的应用程序配置为也能够成功连接。
我知道您可以在krb5.conf中定义多个领域,并且密钥表可以通过组合多个密钥表或仅向现有密钥表添加条目来包含多个条目/凭证。但是,如何在login.conf中定义多个条目?
即。如果我有此条目Principal =“ MSSQLSvc/someDBServer.my.domain@MY.DOMAIN”
但是然后如何连接到具有相同服务名称的第二个数据库服务器 Principal =“ MSSQLSvc/anotherDBServer.my.domain@MY.DOMAIN”
数据库网址:
jdbc:sqlserver://someDBServer.my.domain;databaseName=tempdb;integratedSecurity=true;authenticationScheme=JavaKerberos;
简单的JAVA应用程序:
System.setProperty("java.security.krb5.conf", "c:/krb5/krb5.ini");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.auth.login.config", "c:/krb5/SQLJDBCDriver.conf");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
krb5.ini
[libdefaults]
default_realm = MY.DOMAIN
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[domain_realm]
.my.domain = MY.DOMAIN
my.domain = MY.DOMAIN
[realms]
MY.DOMAIN = {
kdc = 123.123.123.123
default_domain = MY.DOMAIN
}
SQLJDBCDriver.conf-如何为第二个数据库服务器添加另一个条目?
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=false
doNotPrompt=true
useKeyTab=true
keyTab="C:/krb5/mykeytab.keytab"
principal="MSSQLSvc/someDBServer.my.domain@MY.DOMAIN"
debug=true;
};