使用 CommonCryptoLib 對 SAP BW 使用 Kerberos 單一登錄進行 SSO (sapcrypto.dll)

本文說明如何使用 CommonCryptoLib 設定 SAP BW 數據源,以從 Power BI 服務 啟用 SSO(sapcrypto.dll)。

注意

在您嘗試重新整理使用 Kerberos SSO 的 SAP BW 型報表之前,請先完成本文中的步驟和設定 Kerberos SSO 中的步驟。 使用 CommonCryptoLib 作為 SNC 連結庫,可讓 SSO 連線到 SAP BW 應用程式伺服器和 SAP BW 訊息伺服器。

注意

在同一個閘道伺服器上設定這兩個連結庫(sapcrypto 和 gx64krb5)是不支援的案例。 不建議在相同的閘道伺服器上設定這兩個連結庫,因為這會導致連結庫混合使用。 如果您想要同時使用這兩個連結庫,請完全分隔閘道伺服器。 例如,為伺服器 A 設定 gx64krb5,然後為伺服器 B 設定 sapcrypto。請記住,不支援使用 gx64krb5 的伺服器 A 上發生任何失敗,因為 SAP 和 Microsoft 不再支援 gx64krb5。

設定 SAP BW 以使用 CommonCryptoLib 啟用 SSO

注意

內部部署數據閘道是 64 位軟體,因此需要 64 位版本的 CommonCryptoLib (sapcrypto.dll) 來執行 BW SSO。 如果您打算在嘗試透過閘道進行 SSO 連線之前,先在 SAP GUI 中測試與 SAP BW 伺服器的 SSO 連線(建議),您也需要 32 位版本的 CommonCryptoLib,因為 SAP GUI 是 32 位軟體。

  1. 請確定已使用 CommonCryptoLib 正確設定 Kerberos SSO 的 BW 伺服器。 如果是,您可以使用 SSO 來存取 BW 伺服器(直接或透過 SAP BW 訊息伺服器),以及已設定為使用 CommonCryptoLib 的 SAP GUI 之類的 SAP 工具。

    如需設定步驟的詳細資訊,請參閱 SAP 單一登錄:使用 Kerberos/SPNEGO 進行驗證。 您的 BW 伺服器應該使用 CommonCryptoLib 作為其 SNC 連結庫,並且具有以 CN=開頭的 SNC 名稱,例如 CN=BW1。 如需 SNC 名稱需求的詳細資訊(特別是 snc/identity/as 參數),請參閱 Kerberos 組態的 SNC 參數。

  2. 如果您尚未這麼做,請在已安裝閘道的電腦上安裝 x64 版本的 SAP .NET 連線 or

    您可以嘗試從閘道電腦連線到 Power BI Desktop 中的 BW 伺服器,以檢查是否已安裝元件。 如果您無法使用 2.0 實作進行連線,則 .NET 連線 or 未安裝或尚未安裝至 GAC。

  3. 請確定在安裝閘道的電腦上未執行 SAP 安全登入用戶端 (SLC)。

    SLC 快取 Kerberos 票證時,可能會干擾閘道能否使用 Kerberos 進行 SSO。

  4. 如果已安裝 SLC,請將它卸載,或確定您結束 SAP Secure Login Client。 以滑鼠右鍵按兩下系統匣中的圖示,然後選取 [註銷 ] 和 [結束 ],再使用閘道嘗試 SSO 連線。

    不支援在 Windows Server 電腦上使用 SLC。 如需詳細資訊,請參閱 SAP 附注2780475 (需要 s-user)。

    SAP Secure Login Client

  5. 如果您卸載 SLC 或選取 [註銷結束],請開啟 Cmd 視窗,然後輸入 klist purge 以清除任何快取的 Kerberos 票證,再嘗試透過網關進行 SSO 連線。

  6. 從 SAP Launchpad 下載 64 位 CommonCryptoLib (sapcrypto.dll) 8.5.25 版或更新版本 ,並將它複製到閘道電腦上的資料夾。 在複製sapcrypto.dll的相同目錄中,使用下列內容建立名為 sapcrypto.ini 的檔案:

    ccl/snc/enable_kerberos_in_client_role = 1
    

    .ini檔案包含 CommonCryptoLib 在閘道案例中啟用 SSO 所需的組態資訊。

    注意

    這些檔案必須儲存在相同的位置;換句話說, /path/to/sapcrypto/ 應該同時包含sapcrypto.ini和sapcrypto.dll。

    閘道服務使用者和服務使用者模擬的 Active Directory (AD) 使用者,都需要這兩個檔案的讀取和執行權限。 建議將.ini和.dll檔案的許可權授與 [已驗證的使用者] 群組。 為了進行測試,您也可以明確地將這些許可權授與閘道服務使用者和您用於測試的 Active Directory 使用者。 在下列螢幕快照中,我們已授與已驗證的使用者群組 讀取和執行 sapcrypto.dll許可權:

    Authenticated users

  7. 如果您還沒有與閘道相關聯的 SAP BW 資料源,您希望 SSO 連線流經,請在 Power BI 服務 的 [管理閘道] 頁面上新增一個 。 如果您已經有這類資料來源,請加以編輯:

    • 如果您想要建立與 BW 應用程式伺服器的 SSO 連線,請選擇 [SAP Business Warehouse ] 作為 數據源類型
    • 如果您想要建立 BW 訊息伺服器的 SSO 連線,請選取 [Sap Business Warehouse Message Server ]。
  8. 針對 SNC 連結庫,選取SNC_LIBSNC_LIB_64環境變數,或 [自定義]。

    • 如果您選取SNC_LIB,則必須將閘道電腦上SNC_LIB_64環境變數的值設定為閘道電腦上64位複本sapcrypto.dll的絕對路徑。 例如, C:\Users\Test\Desktop\sapcrypto.dll

    • 如果您選擇 [自定義],請將sapcrypto.dll的絕對路徑貼到 [管理網關] 頁面上顯示的 [自定義 SNC 連結庫路徑] 字段中。

  9. 針對 SNC合作夥伴名稱,輸入BW伺服器的SNC名稱。 在 [進階設定] 底下,確定已核取 [透過 Kerberos 透過 Kerberos 使用 SSO 進行 DirectQuery 查詢]。 填入其他欄位,就像您從 PBI Desktop 建立 Windows 驗證連線一樣。

  10. 建立 CCL_PROFILE 系統環境變數,並將其值設定為sapcrypto.ini的路徑。

    CCL_PROFILE system environment variable

    sapcrypto .dll和.ini檔案必須存在於相同的位置。 在上述範例中,sapcrypto.ini和sapcrypto.dll都位於桌面上。

  11. 重新啟動閘道服務。

    Restart gateway service

  12. 執行 Power BI 報表

疑難排解

如果您無法在 Power BI 服務 中重新整理報表,您可以使用閘道追蹤、CPIC 追蹤和 CommonCryptoLib 追蹤來診斷問題。 由於 CPIC 追蹤和 CommonCryptoLib 是 SAP 產品,因此 Microsoft 無法為其提供支援。

閘道記錄

  1. 重現問題。

  2. 開啟閘道應用程式,然後從 [診斷] 索引標籤選取 [匯出記錄]。

    Export gateway logs

CPIC 追蹤

  1. 若要啟用 CPIC 追蹤,請設定兩個環境變數: CPIC_TRACECPIC_TRACE_DIR

    第一個變數會設定追蹤層級,而第二個變數會設定追蹤檔案目錄。 目錄必須是已驗證使用者群組成員可以寫入的位置。

  2. 將CPIC_TRACE設定3,並將CPIC_TRACE_DIR您想要寫入追蹤檔案的目錄。 例如:

    CPIC tracing

  3. 重現問題,並確定 CPIC_TRACE_DIR 包含追蹤檔案。

    CPIC 追蹤可以診斷較高層級的問題,例如無法載入sapcrypto.dll連結庫。 例如,以下是 CPIC 追蹤檔案的代碼段,其中發生.dll載入錯誤:

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

    如果您遇到這類失敗,但您已如上一節所述,在sapcrypto.dll和sapcrypto.ini上設定讀取和執行許可權,請嘗試在包含檔案的資料夾上設定相同的讀取和執行許可權。

    如果您仍然無法載入.dll,請嘗試開啟 檔案的稽核。 檢查 Windows 事件檢視器 中產生的稽核記錄,可能有助於判斷檔案為何無法載入。 尋找模擬 Active Directory 使用者起始的失敗專案。 例如,針對仿真的使用者 MYDOMAIN\mytestuser ,稽核記錄中的失敗看起來會像這樣:

    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 追蹤

  1. 將這幾行新增至您稍早建立的 sapcrypto.ini 檔案,以開啟 CommonCryptoLib 追蹤:

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. ccl/trace/directory 選項變更為 [已驗證的使用者] 群組成員可以寫入的位置。

  3. 或者,建立新的.ini檔案來變更此行為。 在與 sapcrypto.ini 和 sapcrypto.dll 相同的目錄中,使用下列內容建立名為 sectrace.ini 的檔案。 DIRECTORY將 選項取代為電腦上已驗證使用者群組成員可以寫入的位置:

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. 重現問題,並確認 DIRECTORY指向的位置包含追蹤檔案。

  5. 完成後,請關閉CPIC和 CCL 追蹤。

    如需 CommonCryptoLib 追蹤的詳細資訊,請參閱 SAP 附注2491573 (需要 SAP s 使用者)。

模擬

本節說明模擬問題的疑難解答徵兆和解決步驟。

徵兆:查看 GatewayInfo[date].log 您找到類似下列的專案:關於模擬使用者 DOMAIN\User (IsAuthenticated: True,ImpersonationLevel: ImpersonationLevel: Impersonation)。 如果 ImpersonationLevel 的值模擬不同,模擬就不會正確發生。

解決方案:請遵循在閘道機器上授與閘道服務帳戶本機原則許可權一文中找到的步驟。 變更組態之後,重新啟動閘道服務。

驗證:重新整理或建立報告並收集 GatewayInfo[date].log。 開啟最新的 GatewayInfo 記錄檔,然後再次檢查下列字串:關於模擬使用者 DOMAIN\User (IsAuthenticated: True,ImpersonationLevel: Impersonation: Impersonation)以確保 ImpersonationLevel 的值符合模擬。

委派

委派問題通常會在 Power BI 服務 顯示為一般錯誤。 若要判斷委派是否為問題,收集Wireshark追蹤並使用 Kerberos 做為篩選很有用。 如需 Kerberos 錯誤參考,請參閱部落 格文章。 本節的其餘部分說明委派問題的疑難解答徵兆和解決步驟。

徵兆:在 Power BI 服務 您可能會遇到非預期的錯誤,類似於下列螢幕快照。 GatewayInfo[date].log您會看到 [DM.GatewayCore] 擷取 clientPipelineId 的 Ado 查詢執行嘗試期間擷取例外狀況,而匯入 [0D_NW_CHANN] 不會符合任何導出。

Screenshot of unhelpful error

Mashup[date].log 您會看到一般錯誤 GSS-API(maj):未提供認證

查看 CPIC 追蹤 (sec-Microsoft.Mashup*.trc), 您會看到類似下列內容:

[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

錯誤在閘道計算機 sec-Microsoft.Mashup.Con-[].trc 的秒數中變得更清楚:

[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.

如果您查看WireShark追蹤,也可以看到問題。

Screenshot of tracing program showing an error

注意

可以安全地忽略其他錯誤 KRB5KDC_ERR_PREAUTH_REQUIRED

解決方案:您必須將SPN SAP/BW5 新增至服務帳戶。 如需詳細資訊和步驟, 請參閱 SAP 檔

您可能會遇到類似但與 WireShark 追蹤中指令清單相同的錯誤,如下列錯誤 KRB5KDC_ERR_BADOPTION

Screenshot of WireShark program showing a different error

此錯誤表示 可以找到 SPN SAP/BW5 ,但不在閘道服務帳戶的 [委派] 索引標籤上 ,此帳戶可以呈現委派 認證的服務中。 若要修正此問題,請遵循步驟來 設定標準 Kerberos 限制委派的網關服務帳戶。

驗證:適當的設定可防止網關呈現泛型或非預期的錯誤。 如果您仍然看到錯誤,請檢查閘道本身的設定,或 BW 伺服器的設定。

認證錯誤

本節說明認證錯誤問題的疑難解答徵兆和解決步驟。 您也可以看到來自 Power BI 服務 的一般錯誤,如先前的委派一節所述。

根據您在數據源 (SAP BW) 中看到的徵兆,有不同的解決方法,因此我們將檢閱這兩者。

徵兆 1:在 BW 伺服器的 sec-disp+work[].trc 中,您會看到類似下列的追蹤:

[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

解決方案:必要時完成設定步驟,以 在閘道電腦上設定用戶對應組態參數。 即使您已經設定 Microsoft Entra 連線,您也必須完成這些步驟。

驗證:您將能夠在 Power BI 服務 中成功載入報表。 如果未成功,請參閱徵兆 2 中的步驟。

徵兆 2:在 BW 伺服器的 sec-disp+work[].trc 中,您會看到類似下列的追蹤:

[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

解決方案:檢查使用者的 Kerberos 外部識別碼是否符合所顯示的秒數。

  1. 開啟 SAP 登入。
  2. 使用 SU01 交易。
  3. 編輯使用者。
  4. 流覽至 [SNC] 索引標籤,確認 SNC 名稱符合記錄中顯示的名稱。

驗證:正確完成時,您將能夠在 Power BI 服務 中建立和重新整理報表。

如需內部部署數據閘道和 DirectQuery 的詳細資訊,請參閱下列資源: