为 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 Server,运行具有最新 CU 的 SQL Server 2019 (15.x)

配置帐户

帐户名 详细信息
CORPNET\cluadmin 全局用户帐户。 除域控制器外,所有 Windows 服务器上的本地管理员帐户。
CORPNET\pbirsservice PBIRS 服务帐户
CORPNET\linuxservice SQL Server 服务帐户(仅为 Linux 环境上的 SQL Server 创建)
CORPNET\reportuser 用于模拟 PBIRS 常规用户的全局用户帐户

此示例应用场景中使用了单独的服务器和单独的帐户,以确保 Kerberos 委派正常运行(即正在处理双跃点应用场景)。

Linux 上的 SQL Server 配置

在继续执行 PBIRS 的配置(或重新配置)以使用 Linux 上的 SQL Server 作为托管 Report 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 中指定)配置委派,并使用 Service for User to 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 身份验证。 在安装过程中,需要在完成 UI 中的 PBIRS 配置过程或通过命令行完成 PBIRS 配置过程之前,更新其中一个 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 帐户,然后选择“属性”。 权限在“用户映射”页上可见。

最后,我们可以在 SQL Server 上添加 reportuser 作为登录名进行测试。 在这种情况下,我们采用简单按钮,并将用户添加到两个用户数据库 AdventureWorksAdventureWorksDW 中的 db_datareader 角色。

部署报表后

如果需要在部署报表后设置报表订阅,最好在 PBIRS 数据源中配置嵌入凭据。 除了使用配置了“模拟用户查看报表”选项的嵌入凭据之外,所有凭据选项都正常工作。 使用 Windows 凭据时此步骤失败,因为 Linux 上的 SQL Server 实现中的限制使模拟更加困难。