SQL Server Kerberos-Authentifizierung
Diese Anleitung beschreibt, wie man eine Datenbankquelle oder ein Ziel für die Authentifizierung bei Microsoft SQL Server mit Kerberos-Ticket-Cache-Authentifizierung (kinit) konfiguriert.
Hinweis
Diese Konfiguration wird nur für private Jitterbit-Agenten unterstützt.
Hinweis
Das Verhalten der Kerberos- und SQL Server-Authentifizierung kann je nach Microsoft Active Directory-Konfiguration, DNS-Auflösung, Netzwerk-Routing und anderen umgebungsspezifischen Faktoren variieren.
Voraussetzungen
Stellen Sie vor Beginn sicher, dass Folgendes vorhanden ist:
-
Ein Jitterbit privater Agent.
-
Netzwerkzugriff auf Folgendes:
-
Ein Active Directory Domain Controller (Key Distribution Center oder KDC).
-
Der SQL Server-Host.
-
-
Ein gültiges Active Directory-Benutzerkonto.
-
Ein Service Principal Name (SPN), der in Active Directory für SQL Server im folgenden Format konfiguriert ist:
MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
Schritt 1: DNS-Auflösung zum KDC sicherstellen
Kerberos erfordert eine ordnungsgemäße DNS-Auflösung, um den KDC zu finden.
Linux
In einigen Umgebungen müssen möglicherweise DNS-Einstellungen angepasst werden. Ersetzen Sie die folgenden Platzhalter durch Ihre Werte:
<AD_DNS_IP>: Der DNS-Server, der die Active Directory-Domäne auflösen kann.<SECONDARY_DNS_IP>: Ein optionaler Fallback-DNS-Server.
Dies ist eine temporäre Konfiguration. Führen Sie diese Befehle jedes Mal aus, wenn der Container neu gestartet wird:
cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF
Windows
Wenn das Gerät, auf dem der Windows-Agent ausgeführt wird, bereits derselben Domäne wie der KDC beigetreten ist, ist keine weitere Konfiguration erforderlich. Andernfalls fügen Sie die erforderlichen Einträge zu C:\Windows\System32\drivers\etc\hosts hinzu, damit das Gerät die Hostnamen des KDC und SQL Server auflösen kann.
Schritt 2: Kerberos-Client-Dienstprogramme installieren
Linux
Der Host des privaten Agenten muss über installierte Kerberos-Tools verfügen. Diese Tools sind erforderlich, um den Ticket-Cache zu erstellen und die KDC-Kommunikation sowie die Erstellung von Service-Tickets zu validieren.
Führen Sie die folgenden Befehle aus, um krb5-user zu installieren:
apt-get update
apt-get install krb5-user
Dies installiert Folgendes:
kinitklist- Kerberos-Bibliotheken
Windows
Kerberos-Tools sind nativ auf Windows verfügbar. Falls sie nicht installiert sind, laden Sie sie von https://ist.mit.edu/mit-apps/kerberos-win herunter.
Schritt 3: DNS-Auflösung testen
Überprüfen Sie, ob der Agent den KDC-Hostnamen auflösen kann.
Linux
Führen Sie den folgenden Befehl aus, um DNS-Dienstprogramme zu installieren:
apt-get update
apt-get install dnsutils
Testen Sie dann die DNS-Auflösung:
nslookup <DOMAIN_CONTROLLER_HOSTNAME>
Beispiel
nslookup ad.dev.local
Windows
Führen Sie den folgenden Befehl aus, um die Namensauflösung zu testen:
ping <DOMAIN_CONTROLLER_HOSTNAME>
Beispiel
ping ad.dev.local
Falls die Auflösung fehlschlägt, funktioniert die Kerberos-Authentifizierung nicht.
Schritt 4: Kerberos-Konfigurationsdatei erstellen (krb5.conf)
Linux
Verwenden Sie den folgenden Befehl, um die Konfigurationsdatei unter /etc/krb5.conf zu erstellen oder zu bearbeiten:
vi /etc/krb5.conf
Beispielinhalt
[libdefaults]
default_realm = DEV.LOCAL
rdns = false
dns_lookup_kdc = false
dns_lookup_realm = false
[realms]
DEV.LOCAL = {
kdc = ad.dev.local
admin_server = ad.dev.local
}
[domain_realm]
.dev.local = DEV.LOCAL
dev.local = DEV.LOCAL
Windows
Erstellen Sie die Datei krb5.conf mit der oben gezeigten Struktur. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, z. B.:
C:\Jitterbit\kerberos
Konfigurationsparameter
[libdefaults]
default_realm: Der Name der Active Directory-Domäne in Großbuchstaben.rdns = false: Verhindert Probleme bei der Reverse-DNS-Suche.dns_lookup_kdc = false: Deaktiviert die automatische KDC-Erkennung über DNS.dns_lookup_realm = false: Deaktiviert die automatische Realm-Erkennung über DNS.
[realms]
kdc: Der Hostname des Domänencontrollers.admin_server: Der Domänencontroller für administrative Operationen.
[domain_realm]
Ordnet DNS-Domänen dem Kerberos-Realm zu.
Schritt 5: JAAS-Konfigurationsdatei erstellen
Die Kerberos-Authentifizierung erfordert eine JAAS-Konfigurationsdatei (Java Authentication and Authorization Service).
Linux
Führen Sie den folgenden Befehl aus, um das Verzeichnis zu erstellen:
mkdir -p /opt/jitterbit/kerberos
Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei zu erstellen:
vi /opt/jitterbit/kerberos/jaas.conf
Beispielinhalt
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};
Windows
Erstellen Sie die Datei jaas.conf mit der oben gezeigten Struktur. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, z. B.:
C:\Jitterbit\kerberos
JAAS-Parameterreferenz
useTicketCache=true: Verwendet das Kerberos-Ticket, das überkinitabgerufen wurde.useKeyTab=false: Verwendet keine Keytab-Datei.storeKey=false: Speichert keinen geheimen Schlüssel.isInitiator=true: Konfiguriert diesen Client als Authentifizierungsinitiator.doNotPrompt=true: Fordert kein Passwort an.renewTGT=false: Erneuert das Ticket Granting Ticket (TGT) nicht automatisch.debug=true: Aktiviert Kerberos-Debug-Protokolle. (Optional)refreshKrb5Config=true: Lädt die Kerberos-Konfiguration dynamisch neu.
Dateiberechtigungen festlegen (nur Linux)
Die Kerberos-Authentifizierung erfordert ordnungsgemäße Dateiberechtigungen, um ordnungsgemäß zu funktionieren. Wenn die Dateien nicht lesbar sind, schlägt die Authentifizierung mit dem folgenden Fehler fehl:
Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication
Führen Sie die folgenden Befehle aus, um die erforderlichen Berechtigungen festzulegen:
chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent
Schritt 6: Tomcat konfigurieren (setenv.sh)
Linux
Verwenden Sie den folgenden Befehl, um das Tomcat-Startskript unter /opt/jitterbit/tomcat/bin/setenv.sh zu öffnen:
vi /opt/jitterbit/tomcat/bin/setenv.sh
Beispielinhalt
#!/bin/sh
JAVA_OPTS="$JAVA_OPTS \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Dsun.security.jgss.native=true \
-Djava.security.auth.login.config=/opt/jitterbit/kerberos/jaas.conf \
-Dsun.security.krb5.debug=true \
-Djavax.security.auth.useSubjectCredsOnly=false"
export KRB5CCNAME=/tmp/krb5cc_agent
export JAVA_OPTS
Windows
Für den Windows-Private-Agent müssen Sie keine setenv.sh-Datei erstellen. Fügen Sie stattdessen die oben gezeigten JAVA_OPTS-Parameter hinzu, indem Sie die Anweisungen unter Java-Optionen für private Agents konfigurieren befolgen.
Beachten Sie beim Festlegen von KRB5CCNAME den Pfad, da Sie ihn später in Schritt 8 beim Erstellen des Ticket-Cache erneut angeben müssen.
Wenn der Verbindungstest einen Fehler zurückgibt, der jgss oder gss erwähnt, versuchen Sie Folgendes:
- Entfernen Sie den Parameter
-Dsun.security.jgss.native=true. - Fügen Sie
udp_preference_limit = 1zum Abschnitt[libdefaults]vonkrb5.confhinzu. - Starten Sie den Agent neu, damit die Änderungen wirksam werden.
Parameterreferenz
java.security.krb5.conf: Der Pfad zur Kerberos-Konfigurationsdatei.sun.security.jgss.native=true: Aktiviert die native Generic Security Services (GSS)-Implementierung.java.security.auth.login.config: Der Pfad zur JAAS-Konfigurationsdatei.sun.security.krb5.debug=true: Aktiviert Kerberos-Debug-Protokolle (optional).javax.security.auth.useSubjectCredsOnly=false: Ermöglicht die Verwendung externer Anmeldeinformationen.
Schritt 7: Private Agent neu starten
Starten Sie den Private Agent nach jeder Konfigurationsänderung neu.
Linux
Führen Sie den folgenden Befehl aus, um den Agent neu zu starten:
sudo jitterbit restart
Wenn Sie einen Docker-Agent verwenden, starten Sie den Container neu:
docker restart <CONTAINER_NAME>
Wiederholen Sie nach dem Neustart Schritt 1.
Windows
Um den Windows-Private-Agent neu zu starten, verwenden Sie die während der Agent-Installation erstellten Shortcuts zum Beenden und Starten:
Stop Jitterbit Services
Start Jitterbit Services
Schritt 8: Kerberos-Ticket abrufen
Diese Konfiguration verwendet einen Kerberos-Ticket-Cache, der benutzerabhängig ist. Die folgenden Befehle erstellen einen Ticket-Cache, auf den Tomcat zur Laufzeit zugreift. Sie werden möglicherweise aufgefordert, ein Passwort einzugeben.
Linux
Führen Sie den folgenden Befehl aus, um den Ticket-Cache zu erstellen:
kinit -c /tmp/krb5cc_agent <USER>@<REALM>
Überprüfen Sie, ob das Ticket erstellt wurde:
klist -c /tmp/krb5cc_agent
Windows
Verwenden Sie unter Windows denselben Pfad, der für KRB5CCNAME in Schritt 6 angegeben ist.
Führen Sie den folgenden Befehl aus, um den Ticket-Cache zu erstellen:
kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>
Überprüfen Sie, ob das Ticket erstellt wurde:
klist -c <TICKET_CACHE_PATH>
Wenn kein Ticket angezeigt wird, schlägt die Authentifizierung fehl.
Hinweis
Kerberos-Tickets verfallen. Führen Sie kinit erneut aus, um das Ticket bei Bedarf zu erneuern.
Schritt 9: Datenbankverbindung konfigurieren
Konfigurieren Sie die Datenbankquelle oder das Ziel mit den folgenden Einstellungen:
- Treibertyp: Wählen Sie JDBC.
- Treiber: Wählen Sie SQL Server MS JDBC.
-
Aktivieren Sie unter Optionen das Kontrollkästchen Verbindungszeichenfolge manuell erstellen und geben Sie Folgendes ein:
jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
Konfigurieren Sie die Verbindungszeichenfolge mit den folgenden Werten:
<SQL_SERVER_HOST>: Der vollständig qualifizierte Domänenname (FQDN) des SQL Server.<PORT>: Die SQL Server-Portnummer, normalerweise1433.<DATABASE>: Der Name der Zieldatenbank.encrypt: Legen Sie je nach Ihrer Umgebungtrueoderfalsefest.trustServerCertificate=true: Erforderlich bei Verwendung von Transport Layer Security (TLS) ohne vertrauenswürdige Zertifizierungsstelle (CA).