SQL Server Kerberos-Authentifizierung
Dieser Leitfaden beschreibt, wie eine Datenbankverbindung konfiguriert wird, um sich mit Microsoft SQL Server über die Kerberos-Ticket-Cache-Authentifizierung (kinit) zu authentifizieren.
Hinweis
Diese Konfiguration wird nur für Jitterbit-private Agenten unterstützt.
Hinweis
Das Verhalten der Kerberos- und SQL Server-Authentifizierung kann je nach Ihrer 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.
-
Netzwerkzugang zu Folgendem:
-
Einem Active Directory-Domaincontroller (Key Distribution Center, oder KDC).
-
Dem 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: Sicherstellen der DNS-Auflösung zum KDC
Kerberos erfordert eine ordnungsgemäße DNS-Auflösung, um den KDC zu finden.
Linux
In einigen Umgebungen muss DNS möglicherweise angepasst werden. Ersetzen Sie die folgenden Platzhalter durch Ihre Werte:
<AD_DNS_IP>: Der DNS-Server, der die Active Directory-Domain auflösen kann.<SECONDARY_DNS_IP>: Ein optionaler Fallback-DNS-Server.
Dies ist eine vorübergehende Konfiguration. Führen Sie diese Befehle jedes Mal erneut 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-private Agent ausgeführt wird, bereits derselben Domäne wie der KDC angehört, sind keine weiteren Konfigurationen erforderlich. Andernfalls fügen Sie die erforderlichen Einträge in C:\Windows\System32\drivers\etc\hosts hinzu, damit das Gerät die KDC- und SQL Server-Hostnamen auflösen kann.
Schritt 2: Installieren der Kerberos-Client-Utilities
Linux
Der private Agent-Host muss mit Kerberos-Tools ausgestattet sein. Diese Tools sind erforderlich, um den Ticket-Cache zu erstellen und die KDC-Kommunikation sowie die Erstellung von Servicetickets 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. Wenn sie nicht installiert sind, laden Sie sie von https://ist.mit.edu/mit-apps/kerberos-win herunter.
Schritt 3: Testen der DNS-Auflösung
Ü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
Wenn die Auflösung fehlschlägt, funktioniert die Kerberos-Authentifizierung nicht.
Schritt 4: Erstellen der Kerberos-Konfigurationsdatei (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 derselben Struktur, die oben gezeigt wurde. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, wie zum Beispiel:
C:\Jitterbit\kerberos
Konfigurationsparameter
[libdefaults]
default_realm: Der Active Directory-Domainname in Großbuchstaben.rdns = false: Verhindert Probleme mit der umgekehrten DNS-Abfrage.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 Vorgänge.
[domain_realm]
Ordnet DNS-Domains dem Kerberos-Realm zu.
Schritt 5: Erstellen Sie die JAAS-Konfigurationsdatei
Die Kerberos-Authentifizierung erfordert eine Konfigurationsdatei für den Java Authentication and Authorization Service (JAAS).
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 derselben Struktur wie oben gezeigt. Wählen Sie einen Speicherort, auf den der private Agent ohne erhöhte Berechtigungen zugreifen kann, wie zum Beispiel:
C:\Jitterbit\kerberos
JAAS-Parameterreferenz
useTicketCache=true: Verwendet das Kerberos-Ticket, das überkiniterhalten wurde.useKeyTab=false: Verwendet keine Keytab-Datei.storeKey=false: Speichert keinen geheimen Schlüssel.isInitiator=true: Konfiguriert diesen Client als Authentifizierungsinitiator.doNotPrompt=true: Fordert nicht zur Eingabe eines Passworts auf.renewTGT=false: Erneuert das Ticket Granting Ticket (TGT) nicht automatisch.debug=true: Aktiviert die Kerberos-Debug-Protokolle. (Optional)refreshKrb5Config=true: Lädt die Kerberos-Konfiguration dynamisch neu.
Setzen Sie die Dateiberechtigungen (nur Linux)
Die Kerberos-Authentifizierung erfordert die richtigen Dateiberechtigungen, um korrekt zu funktionieren. Wenn die Dateien nicht lesbar sind, schlägt die Authentifizierung mit folgendem 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-Privatagenten müssen Sie keine setenv.sh-Datei erstellen. Fügen Sie stattdessen die oben gezeigten JAVA_OPTS-Parameter hinzu, indem Sie die Anweisungen in Java-Optionen für private Agenten konfigurieren befolgen.
Wenn Sie KRB5CCNAME festlegen, beachten Sie den Pfad, da Sie ihn erneut in Schritt 8 angeben müssen, wenn Sie den Ticket-Cache erstellen.
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]inkrb5.confhinzu. - Starten Sie den Agenten neu, damit die Änderungen wirksam werden.
Parameterreferenz
java.security.krb5.conf: Der Pfad zur Kerberos-Konfigurationsdatei.sun.security.jgss.native=true: Aktiviert die native Implementierung der Generic Security Services (GSS).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: Erlaubt die Verwendung externer Anmeldeinformationen.
Schritt 7: Starten Sie den privaten Agenten neu
Nach jeder Konfigurationsänderung starten Sie den privaten Agenten neu.
Linux
Führen Sie den folgenden Befehl aus, um den Agenten neu zu starten:
sudo jitterbit restart
Wenn Sie einen Docker-Agenten verwenden, starten Sie den Container neu:
docker restart <CONTAINER_NAME>
Nach dem Neustart wiederholen Sie Schritt 1.
Windows
Um den Windows-Privatagenten neu zu starten, verwenden Sie die während der Agenteninstallation erstellten Stop- und Start-Verknüpfungen:
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. Möglicherweise werden Sie 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
Unter Windows verwenden Sie denselben Pfad, der in Schritt 6 für KRB5CCNAME 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 laufen ab. Führen Sie kinit erneut aus, um das Ticket bei Bedarf zu erneuern.
Schritt 9: Konfigurieren Sie die Datenbankverbindung
Konfigurieren Sie die Datenbankverbindung mit den folgenden Einstellungen:
- Treiberart: Wählen Sie JDBC.
- Treiber: Wählen Sie SQL Server (Microsoft).
- Servername: Geben Sie den Namen, die URL oder die IP-Adresse des SQL Servers ein.
- Datenbankname: Geben Sie den Namen der Ziel-Datenbank ein.
- Benutzername und Passwort: Lassen Sie diese Felder leer.
-
Unter Optionale Einstellungen aktivieren Sie das Kontrollkästchen Verwenden Sie die Verbindungszeichenfolge 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 Servers.<PORT>: Die Portnummer des SQL Servers, typischerweise1433.<DATABASE>: Der Name der Ziel-Datenbank.encrypt: Setzen Sie auftrueoderfalse, je nach Ihrer Umgebung.trustServerCertificate=true: Erforderlich, wenn Transport Layer Security (TLS) ohne eine vertrauenswürdige Zertifizierungsstelle (CA) verwendet wird.