适用于: Linux
SQL Server Reporting Services 上的 SQL Server 2019 (15.x) 及更高版本 (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,运行 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 作为托管 Report Server 目录数据库的后端之前,请确保已将 Linux 上的 SQL Server 实例加入域。
您可以按照教程:使用 adutil 在 Linux 上配置 SQL Server 的 Active Directory 身份验证中的说明,安装并配置 adutil,并加入域。
Note
有关 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 中所述),并使用用户到代理服务 (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 标记,并在 RSWindowsNegotiate 属性前面添加 RSWindowsKerberos 和 RSWindowsNTLM 属性。 例如:
<Authentication>
<AuthenticationTypes>
<RSWindowsNegotiate/>
<RSWindowsKerberos/>
<RSWindowsNTLM/>
</AuthenticationTypes>
此步骤是必需的,因为 Linux 上的 SQL Server 仅支持 SQL 和 Kerberos 身份验证。
Note
我们只需要包含 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 作为登录名进行测试。 在这种情况下,我们采用简单按钮,并将用户添加到两个用户数据库 AdventureWorks 和 AdventureWorksDW 中的 db_datareader 角色。
部署报表后
如果需要在部署报表后设置报表订阅,最好在 PBIRS 数据源中配置嵌入凭据。 所有凭据选项均可正常工作,但使用“模拟用户查看报告”选项配置的嵌入式凭据除外。 使用 Windows 凭据时此步骤失败,因为 Linux 上的 SQL Server 实现中的限制使模拟更加困难。