Zum Inhalt springen

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:

  1. Ein Jitterbit privater Agent.

  2. Netzwerkzugang zu Folgendem:

  3. Ein gültiges Active Directory-Benutzerkonto.

  4. 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:

  • kinit
  • klist
  • 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 über kinit erhalten 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:

  1. Entfernen Sie den Parameter -Dsun.security.jgss.native=true.
  2. Fügen Sie udp_preference_limit = 1 zum Abschnitt [libdefaults] in krb5.conf hinzu.
  3. 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:

  1. Treiberart: Wählen Sie JDBC.
  2. Treiber: Wählen Sie SQL Server (Microsoft).
  3. Servername: Geben Sie den Namen, die URL oder die IP-Adresse des SQL Servers ein.
  4. Datenbankname: Geben Sie den Namen der Ziel-Datenbank ein.
  5. Benutzername und Passwort: Lassen Sie diese Felder leer.
  6. 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, typischerweise 1433.
  • <DATABASE>: Der Name der Ziel-Datenbank.
  • encrypt: Setzen Sie auf true oder false, je nach Ihrer Umgebung.
  • trustServerCertificate=true: Erforderlich, wenn Transport Layer Security (TLS) ohne eine vertrauenswürdige Zertifizierungsstelle (CA) verwendet wird.