У нас есть приложение, которое ведет себя как инструмент ETL.Пользователь может предоставить свойства подключения, и приложение подключится к серверу базы данных, используя предоставленные свойства.Мне поручено выяснить, может ли она поддерживать аутентификацию Kerberos (имеется в виду ускоренный курс к Kerberos и попытаться заставить приложение работать).Хотя я могу сделать это с одним сервером базы данных и одним пользователем, моя проблема сейчас заключается в том, как это сделать, если у меня несколько серверов БД и используются разные пользователи.
Пока я пытался создать простое Java-приложение, которое подключается к серверу БД с помощью krb5.conf и login.config (это ускоряет тестирование / обучение таким образом).В конце концов я смог заставить его работать и настроил наше приложение на успешное соединение.
Я знаю, что вы можете определить несколько областей в krb5.conf, и таблица ключей может содержать несколько записей / учетных данных либо путем объединения нескольких таблиц ключей, либопросто добавив запись в существующую таблицу ключей.Но как вы определяете несколько записей в login.conf?
т.е.если у меня есть эта запись принципал = "MSSQLSvc/someDBServer.my.domain@MY.DOMAIN"
, но как мне подключиться ко второму серверу БД с тем же именем принципала службы = "MSSQLSvc / anotherDBServer.my.domain @ MY.DOMAIN "
URL базы данных:
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;
};