跳到主要内容
跳到主要内容

Kerberos

Not supported in ClickHouse Cloud
备注

此页面与 ClickHouse Cloud 不相关。此处文档中记载的功能在 ClickHouse Cloud 服务中不可用。 有关更多信息,请参阅 ClickHouse 云兼容性 指南。

现有并正确配置的 ClickHouse 用户可以通过 Kerberos 认证协议进行身份验证。

目前,Kerberos 只能用作对在 users.xml 中或本地访问控制路径中定义的现有用户的外部验证器。这些用户只能使用 HTTP 请求,并且必须能够使用 GSS-SPNEGO 机制进行身份验证。

对于这种方法,必须在系统中配置 Kerberos,并在 ClickHouse 配置中启用它。

在 ClickHouse 中启用 Kerberos

要启用 Kerberos,应该在 config.xml 中包含 kerberos 部分。此部分可以包含附加参数。

参数

  • principal - 将在接受安全上下文时获取并使用的标准服务主体名称。

    • 此参数是可选的,如果省略,则将使用默认主体。
  • realm - 用于限制身份验证的领域,仅限于发起者的领域与其匹配的请求。

    • 此参数是可选的,如果省略,则不会应用基于领域的额外过滤。
  • keytab - 服务 keytab 文件的路径。

    • 此参数是可选的,如果省略,则必须在 KRB5_KTNAME 环境变量中设置服务 keytab 文件的路径。

示例(进入 config.xml):

<clickhouse>
    <!- ... -->
    <kerberos />
</clickhouse>

带有主体规范:

<clickhouse>
    <!- ... -->
    <kerberos>
        <principal>HTTP/[email protected]</principal>
    </kerberos>
</clickhouse>

带有领域过滤:

<clickhouse>
    <!- ... -->
    <kerberos>
        <realm>EXAMPLE.COM</realm>
    </kerberos>
</clickhouse>
备注

您只能定义一个 kerberos 部分。存在多个 kerberos 部分将强制 ClickHouse 禁用 Kerberos 认证。

备注

principalrealm 部分不能同时指定。两个部分同时存在将强制 ClickHouse 禁用 Kerberos 认证。

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

Kerberos 可用作验证本地定义用户身份(在 users.xml 中定义的用户或在本地访问控制路径中的用户)的方法。目前,仅通过 HTTP 接口的请求可以进行 kerberized(通过 GSS-SPNEGO 机制)。

Kerberos 主体名称格式通常遵循此模式:

  • primary/instance@REALM

主体的 /instance 部分可以出现零次或多次。 发起者标准主体名称的 primary 部分预计与进行身份验证的 kerberized 用户名匹配

users.xml 中启用 Kerberos

为了为用户启用 Kerberos 认证,在用户定义中指定 kerberos 部分,而不是 password 或类似部分。

参数:

  • realm - 将用于限制身份验证的领域,仅限于发起者的领域与其匹配的请求。
    • 此参数是可选的,如果省略,则不会应用基于领域的额外过滤。

示例(进入 users.xml):

<clickhouse>
    <!- ... -->
    <users>
        <!- ... -->
        <my_user>
            <!- ... -->
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
        </my_user>
    </users>
</clickhouse>
备注

请注意,Kerberos 认证不能与任何其他认证机制同时使用。存在诸如 password 等任何其他部分与 kerberos 共同存在将强制 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