跳转到主要内容
本页不适用于 ClickHouse Cloud。本文档介绍的功能不适用于 ClickHouse Cloud 服务。 更多信息,请参阅 ClickHouse 的 Cloud Compatibility 指南。
现有且已正确配置的 ClickHouse 用户可通过 Kerberos 身份验证协议进行验证。 目前,Kerberos 只能作为现有用户的外部身份验证器使用;这些用户定义在 users.xml 或本地访问控制配置中。这些用户只能使用 HTTP 请求,并且必须能够通过 GSS-SPNEGO 机制完成身份验证。 要采用这种方式,必须先在系统中配置 Kerberos,并在 ClickHouse config 中启用它。

在 ClickHouse 中启用 Kerberos

要启用 Kerberos,需要在 config.xml 中添加 kerberos 部分。该部分还可包含其他参数。

参数

  • principal - 接受安全上下文时将获取并使用的规范服务主体名称。
    • 此参数为可选项;如果省略,将使用默认主体。
  • realm - 领域,用于将身份验证限制为仅接受发起方领域与其匹配的请求。
    • 此参数为可选项;如果省略,则不会按领域进行额外过滤。
  • keytab - 服务 keytab 文件的路径。
    • 此参数为可选项;如果省略,则必须在 KRB5_KTNAME 环境变量中设置服务 keytab 文件路径。
示例 (添加到 config.xml 中) :
<clickhouse>
    <!- ... -->
    <kerberos />
</clickhouse>
指定主体时:
<clickhouse>
    <!- ... -->
    <kerberos>
        <principal>HTTP/clickhouse.example.com@EXAMPLE.COM</principal>
    </kerberos>
</clickhouse>
按领域筛选:
<clickhouse>
    <!- ... -->
    <kerberos>
        <realm>EXAMPLE.COM</realm>
    </kerberos>
</clickhouse>
只能定义一个 kerberos 部分。若存在多个 kerberos 部分,ClickHouse 将禁用 Kerberos 身份验证。
不能同时指定 principalrealm 部分。若同时存在 principalrealm 部分,ClickHouse 将禁用 Kerberos 身份验证。

Kerberos 作为现有用户的外部身份验证器

Kerberos 可用作验证本地定义用户身份的一种方法 (即在 users.xml 或本地访问控制配置中定义的用户) 。目前,只有通过 HTTP 接口发出的请求才能使用 Kerberos (通过 GSS-SPNEGO 机制) 。 Kerberos 主体名称格式通常遵循以下模式:
  • primary/instance@REALM
/instance 部分可以出现零次或多次。要使身份验证成功,发起方规范主体名称中的 primary 部分应与进行 Kerberos 身份验证的用户名匹配

users.xml 中启用 Kerberos

要为该用户启用 Kerberos 身份验证,请在用户定义中指定 kerberos 部分,而不要使用 password 或类似部分。 参数:
  • realm - 用于将身份验证限制为仅接受发起者领域与其匹配的请求。
    • 此参数为可选;如果省略,则不会按领域进行额外过滤。
示例 (添加到 users.xml 中) :
<clickhouse>
    <!- ... -->
    <users>
        <!- ... -->
        <my_user>
            <!- ... -->
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
        </my_user>
    </users>
</clickhouse>
请注意,Kerberos 身份验证不能与任何其他身份验证机制同时使用。如果除 kerberos 外还存在其他节 (例如 password) ,ClickHouse 将会关闭。
提醒请注意,现在只要用户 my_user 使用 kerberos,就必须按照前文所述在主 config.xml 文件中启用 Kerberos。

通过 SQL 启用 Kerberos

当 ClickHouse 启用了 通过 SQL 实现的访问控制与账户管理 时,也可以使用 SQL 语句创建由 Kerberos 识别的用户。
CREATE USER my_user IDENTIFIED WITH kerberos REALM 'EXAMPLE.COM'
…或者,不按领域筛选:
CREATE USER my_user IDENTIFIED WITH kerberos
最后修改于 2026年6月10日