> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

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

# Kerberos

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            ClickHouse Cloud 不支持此功能
        </div>;
};

<CloudNotSupportedBadge />

<Note>
  本页不适用于 [ClickHouse Cloud](https://clickhouse.com/cloud)。本文档介绍的功能不适用于 ClickHouse Cloud 服务。
  更多信息，请参阅 ClickHouse 的 [Cloud Compatibility](/docs/zh/products/cloud/guides/cloud-compatibility) 指南。
</Note>

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

目前，Kerberos 只能作为现有用户的外部身份验证器使用；这些用户定义在 `users.xml` 或本地访问控制配置中。这些用户只能使用 HTTP 请求，并且必须能够通过 GSS-SPNEGO 机制完成身份验证。

要采用这种方式，必须先在系统中配置 Kerberos，并在 ClickHouse config 中启用它。

<div id="enabling-kerberos-in-clickhouse">
  ## 在 ClickHouse 中启用 Kerberos
</div>

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

<div id="parameters">
  #### 参数
</div>

* `principal` - 接受安全上下文时将获取并使用的规范服务主体名称。
  * 此参数为可选项；如果省略，将使用默认主体。

* `realm` - 领域，用于将身份验证限制为仅接受发起方领域与其匹配的请求。
  * 此参数为可选项；如果省略，则不会按领域进行额外过滤。

* `keytab` - 服务 keytab 文件的路径。
  * 此参数为可选项；如果省略，则必须在 `KRB5_KTNAME` 环境变量中设置服务 keytab 文件路径。

示例 (添加到 `config.xml` 中) ：

```xml theme={null}
<clickhouse>
    <!- ... -->
    <kerberos />
</clickhouse>
```

指定主体时：

```xml theme={null}
<clickhouse>
    <!- ... -->
    <kerberos>
        <principal>HTTP/clickhouse.example.com@EXAMPLE.COM</principal>
    </kerberos>
</clickhouse>
```

按领域筛选：

```xml theme={null}
<clickhouse>
    <!- ... -->
    <kerberos>
        <realm>EXAMPLE.COM</realm>
    </kerberos>
</clickhouse>
```

<Note>
  只能定义一个 `kerberos` 部分。若存在多个 `kerberos` 部分，ClickHouse 将禁用 Kerberos 身份验证。
</Note>

<Note>
  不能同时指定 `principal` 和 `realm` 部分。若同时存在 `principal` 和 `realm` 部分，ClickHouse 将禁用 Kerberos 身份验证。
</Note>

<div id="kerberos-as-an-external-authenticator-for-existing-users">
  ## Kerberos 作为现有用户的外部身份验证器
</div>

Kerberos 可用作验证本地定义用户身份的一种方法 (即在 `users.xml` 或本地访问控制配置中定义的用户) 。目前，**只有**通过 HTTP 接口发出的请求才能使用 Kerberos (通过 GSS-SPNEGO 机制) 。

Kerberos 主体名称格式通常遵循以下模式：

* *primary/instance\@REALM*

*/instance* 部分可以出现零次或多次。**要使身份验证成功，发起方规范主体名称中的 *primary* 部分应与进行 Kerberos 身份验证的用户名匹配**。

<div id="enabling-kerberos-in-users-xml">
  ### 在 `users.xml` 中启用 Kerberos
</div>

要为该用户启用 Kerberos 身份验证，请在用户定义中指定 `kerberos` 部分，而不要使用 `password` 或类似部分。

参数：

* `realm` - 用于将身份验证限制为仅接受发起者领域与其匹配的请求。
  * 此参数为可选；如果省略，则不会按领域进行额外过滤。

示例 (添加到 `users.xml` 中) ：

```xml theme={null}
<clickhouse>
    <!- ... -->
    <users>
        <!- ... -->
        <my_user>
            <!- ... -->
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
        </my_user>
    </users>
</clickhouse>
```

<Note>
  请注意，Kerberos 身份验证不能与任何其他身份验证机制同时使用。如果除 `kerberos` 外还存在其他节 (例如 `password`) ，ClickHouse 将会关闭。
</Note>

<Info>
  **提醒**

  请注意，现在只要用户 `my_user` 使用 `kerberos`，就必须按照前文所述在主 `config.xml` 文件中启用 Kerberos。
</Info>

<div id="enabling-kerberos-using-sql">
  ### 通过 SQL 启用 Kerberos
</div>

当 ClickHouse 启用了 [通过 SQL 实现的访问控制与账户管理](/docs/zh/concepts/features/security/access-rights#access-control-usage) 时，也可以使用 SQL 语句创建由 Kerberos 识别的用户。

```sql theme={null}
CREATE USER my_user IDENTIFIED WITH kerberos REALM 'EXAMPLE.COM'
```

...或者，不按领域筛选：

```sql theme={null}
CREATE USER my_user IDENTIFIED WITH kerberos
```
