Share via


Verwenden von Kerberos-Single Sign-On für Einmaliges Anmelden (SSO) bei SAP BW mithilfe von CommonCryptoLib (sapcrypto.dll)

In diesem Artikel wird beschrieben, wie Sie Ihre SAP BW-Datenquelle so konfigurieren, dass SSO (Einmaliges Anmelden, Single Sign-On) vom Power BI-Dienst mithilfe von CommonCryptoLib (sapcrypto.dll) aktiviert wird.

Hinweis

Bevor Sie versuchen, einen auf SAP BW basierenden Bericht zu aktualisieren, der Kerberos SSO verwendet, führen Sie beide Schritte in diesem Artikel und die Schritte in Kerberos SSO konfigurieren aus. Die Verwendung von CommonCryptoLib als SNC-Bibliothek ermöglicht SSO-Verbindungen mit SAP BW-Anwendungsservern und SAP BW-Nachrichtenservern.

Hinweis

Das Konfigurieren beider Bibliotheken („sapcrypto“ und „gx64krb5“) auf demselben Gatewayserver ist ein nicht unterstütztes Szenario. Es wird nicht empfohlen, beide Bibliotheken auf demselben Gatewayserver zu konfigurieren, da dies zu einer Mischung aus Bibliotheken führt. Wenn Sie beide Bibliotheken verwenden möchten, trennen Sie den Gatewayserver vollständig. Konfigurieren Sie z. B. „gx64krb5“ für Server A und „sapcrypto“ für Server B. Beachten Sie dabei, dass Fehler auf Server A, der „gx64krb5“ verwendet, nicht unterstützt werden, da „gx64krb5“ von SAP und Microsoft nicht mehr unterstützt wird.

Konfigurieren von SAP BW zum Aktivieren von SSO mithilfe von CommonCryptoLib

Hinweis

Das lokale Datengateway ist eine 64-Bit-Software und erfordert daher die 64-Bit-Version von CommonCryptoLib (sapcrypto.dll), um SSO für SAP BW durchzuführen. Wenn Sie die SSO-Verbindung mit Ihrem SAP BW-Server auf der SAP-Benutzeroberfläche (GUI) testen möchten, bevor Sie eine SSO-Verbindung über das Gateway herstellen (empfohlen), benötigen Sie außerdem die 32-Bit-Version von CommonCryptoLib, da es sich bei SAP GUI um eine 32-Bit-Software handelt.

  1. Stellen Sie sicher, dass Ihr BW-Server ordnungsgemäß mithilfe von CommonCryptoLib für Kerberos-SSO konfiguriert ist. Ist dies der Fall, können Sie SSO mithilfe eines SAP-Tools wie SAP GUI, das für die Verwendung von CommonCryptoLib konfiguriert wurde, für den Zugriff auf Ihren BW-Server zu verwenden (entweder direkt oder über einen SAP BW-Nachrichtenserver).

    Weitere Informationen zu den Setupschritten finden Sie unter SAP Single Sign-On: Authentifizieren mit Kerberos/SPNEGO. Ihr BW-Server sollte CommonCryptoLib als SNC-Bibliothek verwenden und einen SNC-Namen haben, der mit CN= beginnt, z. B. CN=BW1. Weitere Informationen zu SNC-Namensanforderungen (insbesondere zum Parameter „snc/identity/as“) finden Sie unter SNC-Parameter für die Kerberos-Konfiguration.

  2. Installieren Sie die x64-Version des SAP .NET-Connectors auf dem Computer, auf dem das Gateway installiert ist, wenn dies noch nicht geschehen ist.

    Sie können überprüfen, ob die Komponente installiert wurde, indem Sie versuchen, eine Verbindung mit Ihrem BW-Server in Power BI Desktop über den Gatewaycomputer herzustellen. Wenn Sie keine Verbindung mithilfe der 2.0-Implementierung herstellen können, ist der .NET-Connector nicht installiert oder nicht im globalen Assemblycache installiert.

  3. Stellen Sie sicher, dass SAP Secure Login Client (SLC) auf dem Computer, auf dem das Gateway installiert ist, nicht ausgeführt wird.

    SLC speichert Kerberos-Tickets auf eine Weise zwischen, die die Fähigkeit des Gateways, Kerberos für SSO zu verwenden, beeinträchtigen kann.

  4. Wenn SLC installiert ist, deinstallieren oder beenden Sie SAP Secure Login Client. Klicken Sie dazu mit der rechten Maustaste auf das Symbol auf der Taskleiste, und wählen Sie Abmelden und Beenden aus, bevor Sie eine SSO-Verbindung mithilfe des Gateways herstellen.

    Für SLC wird die Verwendung auf Windows Server-Computern nicht unterstützt. Weitere Informationen finden Sie im SAP-Hinweis 2780475 (S-User erforderlich).

    SAP Secure Login Client

  5. Wenn Sie SLC deinstallieren oder Abmelden und Beenden auswählen, öffnen Sie ein Befehlsfenster, und geben Sie klist purge ein, um zwischengespeicherte Kerberos-Tickets zu löschen, bevor Sie eine SSO-Verbindung über das Gateway herstellen.

  6. Laden Sie 64-Bit-CommonCryptoLib (sapcrypto.dll), Version 8.5.25 oder höher, aus dem SAP Launchpad herunter, und kopieren Sie es in einen Ordner auf Ihrem Gatewaycomputer. Erstellen Sie in demselben Verzeichnis, in das Sie „sapcrypto.dll“ kopiert haben, eine Datei mit dem Namen „sapcrypto.ini“ und dem folgenden Inhalt:

    ccl/snc/enable_kerberos_in_client_role = 1
    

    Die INI-Datei enthält Konfigurationsinformationen, die von CommonCryptoLib zum Aktivieren von SSO im Gatewayszenario benötigt werden.

    Hinweis

    Diese Dateien müssen am gleichen Speicherort gespeichert werden. Das bedeutet, dass /path/to/sapcrypto/ sowohl „sapcrypto.ini“ als auch „sapcrypto.dll“ enthalten sollte.

    Sowohl der Gatewaydienstbenutzer als auch der AD-Benutzer (Active Directory), dessen Identität der Dienstbenutzer annimmt, benötigen für beide Dateien Lese- und Ausführungsberechtigungen. Es wird empfohlen, der Gruppe „Authentifizierte Benutzer“ Berechtigungen für die INI- und DLL-Datei zu erteilen. Zu Testzwecken können Sie diese Berechtigungen auch explizit dem Gatewaydienstbenutzer und dem Active Directory-Benutzer erteilen, die Sie zum Testen verwenden möchten. Im folgenden Screenshot wurden der Gruppe „Authentifizierte Benutzer“ die Berechtigungen zum Lesen und Ausführen für „sapcrypto.dll“ erteilt:

    Authenticated users

  7. Wenn Sie noch nicht über eine SAP BW-Datenquelle verfügen, die dem Gateway zugeordnet ist, durch das die SSO-Verbindung verlaufen soll, fügen Sie eine auf der Seite Gateways verwalten im Power BI-Dienst hinzu. Wenn Sie bereits über eine solche Datenquelle verfügen, bearbeiten Sie diese:

    • Wählen Sie SAP Business Warehouse als Datenquellentyp aus, wenn Sie eine SSO-Verbindung zu einem BW-Anwendungsserver herstellen möchten.
    • Wählen Sie SAP Business Warehouse-Nachrichtenserver aus, wenn Sie eine SSO-Verbindung mit einem BW-Nachrichtenserver herstellen möchten.
  8. Wählen Sie für SNC Library entweder die Umgebungsvariable SNC_LIB oder SNC_LIB_64, oder Custom.

    • Wenn Sie SNC_LIB auswählen, müssen Sie den Wert der Umgebungsvariablen SNC_LIB_64 auf dem Gatewaycomputer auf den absoluten Pfad der 64-Bit-Kopie der Datei „sapcrypto.dll“ auf dem Gatewaycomputer festlegen. Beispiel: C:\Benutzer\Test\Desktop\sapcrypto.dll.

    • Wenn Sie Benutzerdefiniert auswählen, fügen Sie den absoluten Pfad zur Datei sapcrypto.dll in das Feld „Benutzerdefinierter SNC-Bibliothekspfad“ ein, das auf der Seite Gateways verwalten angezeigt wird.

  9. Geben Sie als Name des SNC-Partners den SNC-Namen des BW-Servers ein. Stellen Sie sicher, dass unter Erweiterte Einstellungen das Kontrollkästchen SSO über Kerberos für DirectQuery-Abfragen verwenden aktiviert ist. Füllen Sie die anderen Felder so aus, als ob Sie sie für die Einrichtung einer Windows-Authentifizierungsverbindung von PBI-Desktop konfigurieren würden.

  10. Erstellen Sie eine CCL_PROFILE-Systemvariable, und legen Sie deren Wert auf den Pfad der Datei „sapcrypto.ini“ fest.

    CCL_PROFILE system environment variable

    Die Dateien „sapcrypto.dll“ und „sapcrypto.ini“ müssen sich am gleichen Speicherort befinden. Im obigen Beispiel befinden sich die beiden Dateien „sapcrypto.ini“ und „sapcrypto.dll“ auf dem Desktop.

  11. Starten Sie den Gatewaydienst neu.

    Restart gateway service

  12. Ausführen eines Power BI-Berichts

Problembehandlung

Wenn der Bericht im Power BI-Dienst nicht aktualisiert werden kann, können Sie die Gateway-Ablaufverfolgung, CPIC-Ablaufverfolgung und CommonCryptoLib-Ablaufverfolgung verwenden, um das Problem zu diagnostizieren. Da es sich bei der CPIC-Ablaufverfolgung und bei CommonCryptoLib um SAP-Produkte handelt, kann Microsoft dafür keinen Support bereitstellen.

Gatewayprotokolle

  1. Reproduzieren Sie das Problem.

  2. Öffnen Sie hierzu die Gateway-App, und wählen Sie auf der Registerkarte Diagnose die Option Protokolle exportieren aus.

    Export gateway logs

CPIC-Ablaufverfolgung

  1. Legen Sie zum Aktivieren der CPIC-Ablaufverfolgung zwei Umgebungsvariablen fest:CPIC_TRACE und CPIC_TRACE_DIR.

    Mit der ersten Variablen wird die Ablaufverfolgungsebene festgelegt, die zweite Variable gibt das Verzeichnis für die Ablaufverfolgungsdatei an. Bei dem Verzeichnis muss es sich um einen Speicherort handeln, in den Mitglieder der Gruppe „Authentifizierte Benutzer“ schreiben können.

  2. Legen Sie CPIC_TRACE auf 3 und CPIC_TRACE_DIR auf das Verzeichnis fest, in das die Ablaufverfolgungsdateien geschrieben werden sollen. Beispiel:

    CPIC tracing

  3. Reproduzieren Sie das Problem, und stellen Sie sicher, dass CPIC_TRACE_DIR Ablaufverfolgungsdateien enthält.

    Die CPIC-Ablaufverfolgung kann Probleme auf höherer Ebene diagnostizieren, z. B. einen Fehler beim Laden der sapcrypto.dll-Bibliothek. Im Folgenden finden Sie einen Codeausschnitt einer CPIC-Ablaufverfolgungsdatei, in der ein Fehler beim Laden einer DLL aufgetreten ist:

    [Thr 7228] *** ERROR => DlLoadLib()==DLENOACCESS - LoadLibrary("C:\Users\test\Desktop\sapcrypto.dll")
    Error 5 = "Access is denied." [dlnt.c       255]
    

    Wenn ein solcher Fehler auftritt, Sie aber die Berechtigungen zum Lesen und Ausführen in den Dateien „sapcrypto.dll“ und „sapcrypto.ini“ wie im Abschnitt oben beschrieben festgelegt haben, legen Sie die gleichen Lese- und Ausführungsberechtigungen in dem Ordner fest, der die Dateien enthält.

    Wenn Sie die DLL-Datei weiterhin nicht laden können, aktivieren Sie die Überwachung für die Datei. Die resultierenden Überwachungsprotokolle in der Windows-Ereignisanzeige können Ihnen helfen zu ermitteln, warum sich die Datei nicht laden lässt. Suchen Sie nach einem Fehlereintrag, der durch den Active Directory-Benutzer initiiert wurde, dessen Identität angenommen wurde. Für den Benutzer MYDOMAIN\mytestuser, dessen Identität angenommen wurde, würde ein Fehler im Überwachungsprotokoll beispielsweise folgendermaßen aussehen:

    A handle to an object was requested.
    
    Subject:
        Security ID:        MYDOMAIN\mytestuser
        Account Name:       mytestuser
        Account Domain:     MYDOMAIN
        Logon ID:           0xCF23A8
    
    Object:
        Object Server:      Security
        Object Type:        File
        Object Name:        <path information>\sapcrypto.dll
        Handle ID:          0x0
        Resource Attributes:    -
    
    Process Information:
        Process ID:     0x2b4c
        Process Name:   C:\Program Files\On-premises data gateway\Microsoft.Mashup.Container.NetFX45.exe
    
    Access Request Information:
        Transaction ID:     {00000000-0000-0000-0000-000000000000}
        Accesses:           ReadAttributes
    
    Access Reasons:     ReadAttributes: Not granted
    
    Access Mask:        0x80
    Privileges Used for Access Check:   -
    Restricted SID Count:   0
    

CommonCryptoLib-Ablaufverfolgung

  1. Aktivieren Sie die CommonCryptoLib-Ablaufverfolgung, indem Sie der zuvor erstellten Datei „sapcrypto.ini“ die folgenden Zeilen hinzufügen:

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. Geben Sie für die Option ccl/trace/directory einen Speicherort an, in den Mitglieder der Gruppe „Authentifizierte Benutzer“ schreiben können.

  3. Erstellen Sie alternativ eine neue INI-Datei, um dieses Verhalten zu ändern. Erstellen Sie in demselben Verzeichnis, in dem sich „sapcrypto.ini“ und „sapcrypto.dll“ befinden, eine Datei mit dem Namen „sectrace.ini“ und dem folgenden Inhalt. Ersetzen Sie die DIRECTORY-Option durch einen Speicherort auf Ihrem Computer, in den Mitglieder der Gruppe „Authentifizierte Benutzer“ schreiben können:

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. Reproduzieren Sie das Problem, und prüfen Sie, ob der Speicherort, auf den DIRECTORY verweist, Ablaufverfolgungsdateien enthält.

  5. Wenn Sie fertig sind, deaktivieren Sie die CPIC- und CCL-Ablaufverfolgung.

    Weitere Informationen zur CommonCryptoLib-Ablaufverfolgung finden Sie in SAP-Hinweis 2491573 (S-User von SAP erforderlich).

Identitätswechsel

In diesem Abschnitt werden die Problembehandlung bei Symptomen und die Lösungsschritte für Identitätswechselprobleme beschrieben.

Symptom: Beim Betrachten von GatewayInfo[date].log finden Sie einen Eintrag ähnlich dem folgenden: About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) . Wenn sich der Wert für ImpersonationLevel vom Identitätswechselunterscheidet, erfolgt der Identitätswechsel nicht ordnungsgemäß.

Lösung: Führen Sie die Schritte aus, die im Artikel Gewähren lokaler Richtlinienrechte für das Gatewaydienstkonto auf dem Gatewaycomputer beschrieben sind. Starten Sie den Gatewaydienst neu, nachdem Sie die Konfiguration geändert haben.

Überprüfung: Aktualisieren oder erstellen Sie den Bericht, und sammeln Sie die GatewayInfo[date].log. Öffnen Sie die neueste GatewayInfo-Protokolldatei, und überprüfen Sie erneut die folgende Zeichenfolge: About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation), um sicherzustellen, dass der Wert für ImpersonationLevel mit Identitätswechselübereinstimmt.

Delegierung

Delegierungsprobleme werden im Power BI-Dienst in der Regel als generische Fehler angezeigt. Um zu ermitteln, ob die Delegierung das Problem ist, ist es hilfreich, die Wireshark-Ablaufverfolgungen zu erfassen und Kerberos als Filter zu verwenden. Informationen zu Kerberos-Fehlern finden Sie im Blogbeitrag. In Rest dieses Abschnitts werden die Problembehandlung bei Symptomen und die Lösungsschritte für Delegierungsprobleme beschrieben.

Symptom: In der Power BI-Dienst tritt möglicherweise ein unerwarteter Fehler auf, ähnlich dem folgenden Screenshot. Die GatewayInfo[date].log zeigt an, dass [DM.GatewayCore] während des Ado-Abfrageausführungsversuchs für clientPipelineId eine Ausnahme erfasst, und der Import [0D_NW_CHANN] mit keinen Exporten übereinstimmt.

Screenshot of unhelpful error

Im Mashup[date].log wird der generische Fehler GSS-API(protokolldatei) angezeigt: Es wurden keine Anmeldeinformationen angegeben.

Wenn Sie sich die CPIC-Ablaufverfolgungen (sec-Microsoft.Mashup*.trc) ansehen, sehen Sie etwas ähnliches wie das Folgende:

[Thr 4896] *** ERROR => SncPEstablishContext() failed for target='p:CN=BW5' [sncxxall.c 3638]
[Thr 4896] *** ERROR => SncPEstablishContext()==SNCERR_GSSAPI [sncxxall.c 3604]
[Thr 4896] GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] <<- SncProcessOutput()==SNCERR_GSSAPI
[Thr 4896]
[Thr 4896] LOCATION CPIC (TCP/IP) on local host HNCL2 with Unicode
[Thr 4896] ERROR GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] TIME Thu Oct 15 20:49:31 2020
[Thr 4896] RELEASE 721
[Thr 4896] COMPONENT SNC (Secure Network Communication)
[Thr 4896] VERSION 6
[Thr 4896] RC -4
[Thr 4896] MODULE sncxxall.c
[Thr 4896] LINE 3604
[Thr 4896] DETAIL SncPEstablishContext
[Thr 4896] SYSTEM CALL gss_init_sec_context
[Thr 4896] COUNTER 3
[Thr 4896]
[Thr 4896] *** ERROR => STISEND:STISncOut failed 20 [r3cpic.c 9834]
[Thr 4896] STISearchConv: found conv without search

Der Fehler wird in den Sectraces des Gatewaycomputers sec-Microsoft.Mashup.Con-[].trcdeutlicher:

[2020.10.15 20:31:38.396000][4][Microsoft.Mashup.Con][Kerberos ][ 3616] AcquireCredentialsHandleA called successfully.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] InitializeSecurityContextA returned -2146893053 (0x80090303). Preparation for kerberos failed!
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Getting kerberos ticket for 'SAP/BW5' failed (user name is affonso_v@HANABQ.COM)
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 18: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 17: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 23: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 3: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.

Dieses Problem wird auch deutlich, wenn Sie sich die WireShark-Überwachung ansehen.

Screenshot of tracing program showing an error

Hinweis

Die anderen Fehler KRB5KDC_ERR_PREAUTH_REQUIRED können ignoriert werden.

Lösung: Sie müssen einem Dienstkonto einen SPN SAP/BW5 hinzufügen. Ausführliche Informationen und Schritte finden Sie in der SAP-Dokumentation.

Möglicherweise tritt ein ähnlicher, aber nicht identischer Fehler auf, der sich in WireShark-Ablaufverfolgungen als der folgende Fehler KRB5KDC_ERR_BADOPTION manifestiert:

Screenshot of WireShark program showing a different error

Dieser Fehler weist darauf hin, dass der SPN SAP/BW5 gefunden wurde, sich aber nicht in den Diensten befindet, für die dieses Konto delegierte Anmeldeinformationen auf der Registerkarte „Delegierung“ für das Gatewaydienstkonto vorweisen kann. Um das Problem zu beheben, führen Sie die in Konfigurieren des Gatewaydienstkontos für die standardmäßige eingeschränkte Kerberos-Delegierung beschriebenen Schritte aus.

Überprüfung: Die richtige Konfiguration verhindert, dass generische oder unerwartete Fehler vom Gateway angezeigt werden. Wenn weiterhin Fehler angezeigt werden, überprüfen Sie die Konfiguration des Gateways selbst oder die Konfiguration des BW-Servers.

Fehler bei Anmeldeinformationen

In diesem Abschnitt werden die Problembehandlung bei Symptomen und die Lösungsschritte für Probleme mit Anmeldeinformationen beschrieben. Möglicherweise werden auch generische Fehler aus der Power BI-Dienst angezeigt, wie im Abschnitt zur Delegierung weiter oben beschrieben.

Basierend auf den Symptomen, die in der Datenquelle (SAP BW) auftreten, gibt es verschiedene Lösungen, daher werden wir beides überprüfen.

Symptom 1: In den Sectraces sec-disp+work[].trc vom BW-Server werden Ablaufverfolgungen ähnlich der folgenden angezeigt:

[2020.05.26 14:21:28.668325][4][disp+work ][SAPCRYPTOLIB][435584] { gss_display_name [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] gss_display_name output buffer (41 bytes) [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] CN=DAVID@XS.CONTOSO.COM@CONTOSO.COM

Lösung: Führen Sie bei Bedarf die Konfigurationsschritte zum Festlegen von Konfigurationsparametern für die Benutzerzuordnung auf dem Gatewaycomputer aus. Sie müssen diese Schritte auch dann ausführen, wenn Sie die Microsoft Entra Connect haben.

Überprüfung: Sie können den Bericht erfolgreich in den Power BI-Dienst laden. Wenn dies nicht erfolgreich ist, sehen Sie sich die Schritte in Symptom 2 an.

Symptom 2: In den Sectraces sec-disp+work[].trc vom BW-Server werden Ablaufverfolgungen ähnlich der folgenden angezeigt:

[2020.10.19 23:10:15.469000][4][disp+work.EXE ][SAPCRYPTOLIB][ 4460] { gss_display_name
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] gss_display_name output buffer (23 bytes)
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] CN=DAVID@CONTOSO.COM

Lösung: Überprüfen Sie, ob die externe Kerberos-ID für den Benutzer mit den angezeigten Abschnitten übereinstimmen.

  1. Öffnen Sie die SAP-Anmeldung.
  2. Verwenden Sie die SU01-Transaktion.
  3. Bearbeiten Sie den Benutzer.
  4. Navigieren Sie zur Registerkarte SNC, und vergewissern Sie sich, dass der SNC-Name mit dem in Ihren Protokollen angezeigten übereinstimmt.

Überprüfung: Wenn sie ordnungsgemäß abgeschlossen ist, können Sie Berichte im Power BI-Dienst erstellen und aktualisieren.

Weitere Informationen zum lokalen Datengateway und zu DirectQuery finden Sie in den folgenden Ressourcen: