為 Linux 上的 SQL Server 設定 Power BI 報表伺服器目錄資料庫

適用於: SQL Server 2019 (15.x) 和更新版本 - Linux SQL Server Reporting Services (2019 和更新版本)

本文說明如何安裝和設定 Linux 上的 SQL Server 的 Power BI 報表伺服器 (PBIRS) 目錄資料庫。

必要條件

在本文中,這些範例會使用網域 CORPNET.CONTOSO.COM 和下列設定。

設定機器

機器 作業系統 詳細資料
Windows 網域控制站 Windows Server 2019 或 Windows Server 2022
報告開發和部署 (WIN19) Windows Server 2019,執行 Visual Studio 2019 - 報告開發和部署

- 檔案共用服務,做為需求驅動或排程報表輸出的存放庫
SQL Server Reporting Services (WIN22) Windows Server 2022,執行支援的 Power BI 報表伺服器版本 (PBIRS) 1
開發人員計算機 Windows 11 用戶端,執行 SQL Server Management Studio (SSMS)
SQL Server 2019 (rhel8test) Red Hat Enterprise Linux (RHEL) 8.x 伺服器,執行 SQL Server 2019 (15.x) 與最新的 CU

設定帳戶

帳戶名稱 詳細資料
CORPNET\cluadmin 全域使用者帳戶。 域控制器以外的所有 Windows 伺服器上本機系統管理員帳戶。
CORPNET\pbirsservice PBIRS 服務帳戶
CORPNET\linuxservice SQL Server 服務帳戶 (僅針對 Linux 上的 SQL Server 環境建立)
CORPNET\reportuser 用來模擬 PBIRS 一般使用者的全域使用者帳戶

在此範例案例中會使用不同的伺服器和個別帳戶,以確保 Kerberos 委派正常運作 (也就是正在處理雙躍點案例)。

Linux 上的 SQL Server 設定

在繼續執行 PBIRS 的設定 (或重新設定) 之前,請使用 Linux 上的 SQL Server 作為裝載報表伺服器目錄資料庫的後端,請確定 Linux 上的 SQL Server 執行個體已加入網域。

您可以依照教學課程:使用 adutil 為 Linux 上的 SQL Server 設定 Active Directory 驗證中的指示,安裝及設定 adutil 並加入網域。

注意

如需 RHEL 8 上特定套件的相關信息,請參閱使用 SSSD 直接將 RHEL 系統連線至 AD

SQL Server 服務主體名稱 (SPN)

在安裝和設定 PBIRS 之前,您必須在 CORPNET 網域上設定必要的 SPN。 在此情況下,可以使用具有網域管理員權限的使用者,但具有足夠權限來建立 SPN 的任何使用者都是可行的。 建立 SPN 之後,帳戶必須設定為使用 Kerberos 限制委派。

以下是此案例的最低必要 SPN:

  • 使用管理員命令提示字元,為 Linux 上的 SQL Server 服務帳戶建立 SPN。 此執行個體使用預設連接埠 1433:

    setspn -S MSSQLSvc/rhel8test:1433 CORPNET\linuxservice
    setspn -S MSSQLSvc/rhel8test.CORPNET.CONTOSO.COM:1433 CORPNET\linuxservice
    
  • 接下來的兩個 SPN 適用於 Power BI 報表伺服器服務帳戶。

    setspn -S HTTP/WIN22.CORPNET.CONTOSO.COM CORPNET\pbirsservice
    setspn -S HTTP/WIN22 CORPNET\pbirsservice
    

為了處理轉送 Kerberos 票證的 Kerberos 需求,在限制委派實作內運作時,我們會使用 Microsoft 對 MIT Kerberos 標準的延伸項目來設定委派,如 RFC 4120 中所指定,並使用使用者 Proxy 服務 (S4U2proxy)。 此機制可讓 PBIRS 服務和 SQL Server 服務代表使用者取得其他指定服務的服務票證。

例如,當 reportuser 使用 PBIRS 伺服器的 Web 介面進行驗證以檢視報表時,報表會執行並必須存取資料來源 (例如 SQL Server 資料表) 的資料。 SQL Server 服務必須取得 reportuser Kerberos 服務票證,其在驗證程式期間授與給 PBIRS 伺服器。 S4U2proxy 延伸項目提供必要的通訊協議轉換,以便傳遞所需的認證,而不需要轉送使用者的 TGT (票證授權票證) 或使用者的工作階段金鑰。

為了達到此目的,PBIRS 服務帳戶 (在此範例中為 pbirsservice) 和 SQL Server 服務帳戶 (在此範例中為 linuxservice) 必須獲得網域中「委派的受信任驗證」權限。 有多種方式可以授與此許可權 (也就是 ADSI 編輯器、電腦和使用者 UI 等等)。 在此範例中,我們使用了提升許可權的 PowerShell 命令:

  • 取得 SQL Server 服務帳戶,並將其設定為允許委派。 此步驟不僅會啟用 Kerberos 委派,還能在帳戶上啟用 S4U2proxy (用於通訊協定轉換) 委派。 最後兩個 Cmdlet 會將委派授權單位套用至網域中的特定資源,也就是 SQL Server 執行個體的 SPN。

    Get-ADUser -Identity linuxservice | Set-ADAccountControl -TrustedToAuthForDelegation $True
    Set-ADUser -Identity linuxservice -Add @{'msDS-AllowedToDelegateTo'=@('MSSQLSvc/rhel8test.CORPNET.CONTOSO.COM:1433')}
    Set-ADUser -Identity linuxservice -Add @{'msDS-AllowedToDelegateTo'=@('MSSQLSvc/rhel8test:1433')}
    
  • 取得 Power BI 報表伺服器服務帳戶,並將其設定為允許委派。 此步驟不僅會啟用 Kerberos 委派,還能在帳戶上啟用 S4U2proxy (用於通訊協定轉換) 委派。 最後兩個 Cmdlet 會將委派授權單位套用至網域中的特定資源,也就是 SQL Server 和 PBIRS 伺服器的 SPN。

    Get-ADUser -Identity pbirsservice | Set-ADAccountControl -TrustedToAuthForDelegation $True
    Set-ADUser -Identity pbirsservice -Add @{'msDS-AllowedToDelegateTo'=@('MSSQLSvc/rhel8test.CORPNET.CONTOSO.COM:1433')}
    Set-ADUser -Identity pbirsservice -Add @{'msDS-AllowedToDelegateTo'=@('MSSQLSvc/rhel8test:1433')}
    Set-ADUser -Identity pbirsservice -Add @{'msDS-AllowedToDelegateTo'=@('HTTP/Win22.CORPNET.CONTOSO.COM')}
    Set-ADUser -Identity pbirsservice -Add @{'msDS-AllowedToDelegateTo'=@('HTTP/Win22')}
    

Power BI 報表伺服器 (PBIRS)

PBIRS 應以「僅設定」模式安裝。

安裝 PBIRS 之後,您必須立即將它設定為支援 Kerberos 驗證。 PBIRS 預設僅支援 NTLM 驗證。 在安裝程序期間,您需要先更新其中一個 PBIRS 設定檔,再在 UI 中或透過命令列完成 PBIRS 設定程式。 如果您使用現有的 PBIRS 安裝,則您仍然需要執行編輯,而且必須重新啟動 PBIRS 服務才能生效。 設定檔是 rsreportserver.config。 它位於安裝 PBIRS 的路徑中。 例如,在 PBIRS 的預設安裝上,檔案位於下列位置:

C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer

您可以在任何文字編輯器中編輯此 XML 檔案。 在編輯之前,請記得製作檔案的複本。 開啟檔案之後,請在 XML 檔中搜尋 AuthenticationTypes 標記,並在 RSWindowsNTLM 屬性前面新增 RSWindowsNegotiateRSWindowsKerberos 屬性。 例如:

<Authentication>
<AuthenticationTypes>
    <RSWindowsNegotiate/>
    <RSWindowsKerberos/>
    <RSWindowsNTLM/>
</AuthenticationTypes>

此步驟是必要的,因為 Linux 上的 SQL Server 只支援 SQL 和 Kerberos 驗證。

注意

我們只需要包含 RSWindowsKerberos 屬性,但如果需要跨支援 Windows 和 Linux SQL Server 執行個體的混合伺服器群標準化 PBIRS 設定檔,使用 RSWindowsNegotiate 會很有幫助。

PBIRS UI 設定

在設定檔編輯完成後重新啟動了 PBIRS 服務時,您可以繼續進行其餘 PBIRS 設定選項,例如設定網域服務帳戶,以及連線到遠端 Linux 上的 SQL Server 執行個體。

PBIRS 服務帳戶應該會出現在具有適當權限的 SQL Server 執行個體內。 您可以在 SQL Server Management Studio (SSMS) 中檢查權限。 在 [物件總管] 中,流覽至 [安全性]>[登入],以滑鼠右鍵單擊 CORPNET\pbirsservice 帳戶,然後選取 [屬性]。 權限會顯示在 [使用者對應] 頁面上。

最後,我們可以將 reportuser 新增為 SQL Server 上的登入,以供測試之用。 在此情況下,我們採取了簡單按鈕,並將使用者新增至兩個使用者資料庫中的 db_datareader 角色:AdventureWorksAdventureWorksDW

部署報表之後

如果您需要在部署報表之後設定報表訂閱,最好在 PBIRS 資料源中設定內嵌認證。 除了使用以 [模擬使用者檢視報告] 選項設定的內嵌認證之外,所有認證選項都能正常運作。 使用 Windows 認證時,此步驟會失敗,因為 Linux 上的 SQL Server 實作中的限制讓模擬更加困難。