Kerberos 疑难解答

本主题中的故障排除建议分为与服务器上的单一登录 (SSO) 相关的问题以及委派数据源的问题。

另请参见 Tableau 社区 wiki 页面:Testing Database Kerberos Configuration On Linux(在 Linux 上测试数据库 Kerberos 配置)(链接在新窗口中打开)

Tableau Server 单点登录

在 Kerberos SSO 环境中,通过 Web 浏览器或 Tableau Desktop 登录到 Tableau Server 的用户可能会看到一条消息,指明 Tableau Server 无法(使用单点登录)自动将这些用户登录。该消息建议用户改为提供 Tableau Server 用户名和密码。

在客户端计算机上排查登录错误

  • 输入用户名和密码 — 若要检查用户对 Tableau Server 的一般访问权限,请通过输入用户的名称和密码进行登录。

    如果这些凭据失败,则该用户可能不是 Tableau Server 上的用户。为了使 Kerberos SSO 起作用,用户必须能够访问 Tableau Server,并且必须获得 Active Directory 授予的票证授予票证 (TGT),如此列表后面的“TGT”项中所述。

  • 检查其他用户的 SSO 凭据 — 尝试使用其他用户帐户通过 SSO 连接到 Tableau Server。如果所有用户均受影响,则问题可能在 Kerberos 配置中。

  • 使用不是服务器计算机的计算机 — 如果在 localhost 上登录 Tableau Server,Kerberos SSO 将不起作用。客户端必须从 Tableau Server 计算机以外的计算机进行连接。

  • 使用服务器名称而不是 IP 地址 — 如果输入 IP 地址作为 Tableau Server 名称,Kerberos SSO 将不起作用。此外,用于访问 Tableau Server 的服务器名称必须与 Kerberos 配置中使用的名称匹配(请参见下面的密钥表条目)。

  • 确认客户端有 TGT — 客户端计算机必须有来自 Active Directory 域的 TGT(票证授予票证)。不支持代理授予票证的约束委派。

    若要确认客户端计算机具有 TGT,请执行以下操作:

    • 在 Windows 上,打开命令提示符并键入以下命令:klist tgt

    • 在 Mac 上,打开终端窗口并键入以下命令:klist

    输出应显示正尝试接受 Tableau Server 身份验证的用户/域的 TGT。

    在以下情况下,客户端计算机可能没有 TGT:

    • 客户端计算机使用 VPN 连接。

    • 客户端计算机没有加入域(例如,它是在工作时使用的非工作用计算机)。

    • 用户使用本地(非域)帐户登录到计算机。

    • 计算机是没有将 Active Directory 用作网络帐户服务器的 Mac 计算机。

  • 确认浏览器版本和设置 — 对于 Web 浏览器登录,请确保浏览器对于 Kerberos 受支持并在必要的情况下已正确配置。

    • Internet Explorer (IE) 和 Chrome 立即可在 Windows 上运行。

    • Safari 立即可在 Mac 上运行。

    • Firefox 需要额外的配置。

    有关详细信息,请参见Kerberos SSO 的 Tableau 客户端支持

在服务器上排查登录错误

如果无法通过客户端计算机解决问题,则下面的步骤是在运行 Tableau Server 的计算机上排除故障。管理员可以使用请求 ID 在 Tableau Server 上的 Apache 日志中查找登录尝试。

  • 日志文件 — 查看 Apache error.log 中的错误(含有失败登录尝试的确切日期/时间)。

  • 键表条目 — 如果 error.log 条目包含“No key table entry matching HTTP/<servername>.<domain>.<org>@”(没有与 HTTP/<服务器名称>.<域>.<org> 匹配的键表条目)消息,例如:

    [Fri Oct 24 10:58:46.087683 2014] [:error] [pid 2104:tid 4776] [client 10.10.1.62:56789] gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, No key table entry found matching HTTP/servername.domain.com@)

    此错误是由以下任意项的不匹配造成的:

    • Tableau Server URL - 客户端计算机用于访问服务器的 URL。

      这是您键入 Tableau Desktop 或浏览器地址栏的名称。它可以是短名称 (http://servername),也可以是完全限定域名 (http://servername.domain.com)

    • 服务器 IP 地址的 DNS 反向查找。

      它使用 IP 地址查找 DNS 名称。

      在命令提示符处,键入:

      ping servername

      利用在 ping 服务器之后返回的 IP 地址执行 DNS 反向查找,键入:

      nslookup <ip address>

      nslookup 命令将返回该 IP 地址的网络信息。在响应的 Non-authoritative answer 部分中,验证完全限定的域名 (FQDN) 是否与以下配置的值匹配: 

      • Kerberos .keytab 文件。

      • 服务器的服务主体名称 (SPN)

      有关配置这些值的详细信息,请参见了解密钥表要求

验证 Kerberos 配置脚本

您可能需要修改用于生成环境变量密钥表文件的 ktpass 命令。查看知识库文章无法为 Tableau Server 生成 Kerberos 脚本配置(链接在新窗口中打开)中的疑难解答步骤。

数据源 SSO

委派的数据源访问失败

检查 vizqlserver 日志文件中是否有“workgroup-auth-mode”:

在日志文件中查找“workgroup-auth-mode”。它应显示“kerberos-impersonate”而不是“as-is”。

Kerberos 委派多域配置

Tableau Server 能够从其他 Active Directory 域中委派用户。如果您的数据库使用 MIT Kerberos,您需要将 Kerberos 主体调整为数据库用户映射。具体而言,您将需要使用用户将从中连接的每个 Kerberos 域的规则更新 krb5.conf。使用 [realms] 部分中的 auth_to_local 标记将主体名称映射到本地用户名。

例如,假设一个用户为 EXAMPLE\jsmith,其 Kerberos 主体为 jsmith@EXAMPLE.LAN。在这种情况下,Tableau Server 将指定委派用户 jsmith@EXAMPLE。Tableau Server 将使用 Active Directory 旧域别名作为 Kerberos 域。

目标数据库可能已经有诸如以下规则,用于将用户 jsmith@EXAMPLE.LAN 映射到数据库用户 jsmith

EXAMPLE.LAN = {
   RULE:[1:$1@$0](.*@EXAMPLE.LAN)s/@.*//
   DEFAULT
}

为了支持委派,您必须添加另一条规则,将 jsmith@EXAMPLE 映射到数据库用户:

EXAMPLE.LAN = {
   RULE:[1:$1@$0](.*@EXAMPLE.LAN)s/@.*//
   RULE:[1:$1@$0](.*@EXAMPLE)s/@.*//
   DEFAULT
}

有关详细信息,请参见 MIT Kerberos 文档主题 krb5.conf(链接在新窗口中打开)

跨域约束委派

在 KDC 运行于 Windows 2012 之前的 Windows Server 上的某些跨域方案中,委派可能会失败。您可能会看到以下错误:

  • SQL Server Network Interfaces:The system cannot contact a domain controller to service the authentication request.Please try again later.(系统无法联系域控制器来为身份验证请求提供服务。请稍后再试。)
  • SQL Server Native Client: Cannot generate SSPI context.(SQL Server Native Client:无法生成 SSPI 上下文。)
  • 域控制器将返回:KRB-ERR-POLICY error with a status STATUS_CROSSREALM_DELEGATION_FAILURE (0xc000040b)

“跨域”是指 Tableau Server 使用不同服务帐户运行在与数据源不同的域中的情形。例如:

  • Tableau Server 使用 DomainA 服务帐户运行在 DomainA 上。
  • SQL Server 使用 DomainB 服务帐户运行在 DomainB 上。

只有当两个服务器位于同一域中时,传统约束委派才能工作。用户可能来自其他域。

如果您看到上述错误,则您的 Active Directory 管理员应移除在委派帐户上配置的任何传统约束委派以启用此方案。可以使用 Active Directory 管理工具或通过移除与 Active Directory 属性 msDS-AllowedToDelegateTo. 关联的值来移除委派。

如果想要随跨域委派一起保留现有单域委派,您必须使用基于资源的约束委派对两者进行配置。

有关 Kerberos 和约束委派的详细信息,请参见 Microsoft 主题 Kerberos 约束委派概述(链接在新窗口中打开)

Web 制作

有两种不支持 Kerberos 委派的 Web 制作场景:“在 Web 上连接到数据”和“在 Web 上创建数据源”功能尚不支持委派。具体而言,如果通过 Web 制作创建使用 Kerberos 的数据源,则数据源将使用“运行身份服务帐户”身份验证。如果要使用 Kerberos 委派创建数据源,则必须使用 Tableau Desktop 进行发布。有关运行身份服务帐户的详细信息,请参见启用 Kerberos 服务帐户访问

感谢您的反馈!