跳至主要内容

Kerberos

注意

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

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

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

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

在 ClickHouse 中启用 Kerberos

要启用 Kerberos,应在 config.xml 中包含 kerberos 部分。此部分可能包含其他参数。

参数:

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

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

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

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

示例(放入 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 部分不能同时指定。principalrealm 部分同时存在将强制 ClickHouse 禁用 Kerberos 身份验证。

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

Kerberos 可用作验证本地定义的用户(在 users.xml 或本地访问控制路径中定义的用户)身份的方法。目前,**只有**通过 HTTP 接口的请求才能被kerberize(通过 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