Как настроить Kerberos для нескольких серверов баз данных и / или пользователей - PullRequest
0 голосов
/ 09 июля 2019

У нас есть приложение, которое ведет себя как инструмент 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;
};  
...