> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Существующие и корректно настроенные пользователи ClickHouse могут проходить аутентификацию по протоколу Kerberos.

# Kerberos

<CloudNotSupportedBadge />

<Note>
  Эта страница не применима к [ClickHouse Cloud](https://clickhouse.com/cloud). Описанная здесь возможность недоступна в сервисах ClickHouse Cloud.
  Дополнительные сведения см. в руководстве ClickHouse [Cloud Compatibility](/ru/products/cloud/guides/cloud-compatibility).
</Note>

Существующие и корректно настроенные пользователи ClickHouse могут проходить аутентификацию с помощью протокола Kerberos.

В настоящее время Kerberos можно использовать только как внешний аутентификатор для существующих пользователей, определенных в `users.xml` или в локальных путях управления доступом. Эти пользователи могут использовать только HTTP-запросы и должны поддерживать аутентификацию с помощью механизма GSS-SPNEGO.

Для такого подхода Kerberos должен быть настроен в системе и включен в конфигурации ClickHouse.

<div id="enabling-kerberos-in-clickhouse">
  ## Включение Kerberos в ClickHouse
</div>

Чтобы включить Kerberos, добавьте раздел `kerberos` в файл `config.xml`. Этот раздел может содержать дополнительные параметры.

<div id="parameters">
  #### Параметры
</div>

* `principal` — каноническое имя субъекта сервиса, которое будет получено и использовано при приеме контекстов безопасности.
  * Этот параметр необязателен; если он не указан, будет использоваться субъект по умолчанию.

* `realm` — realm, который будет использоваться для ограничения аутентификации только теми запросами, realm инициатора которых с ним совпадает.
  * Этот параметр необязателен; если он не указан, дополнительная фильтрация по realm применяться не будет.

* `keytab` — путь к файлу keytab сервиса.
  * Этот параметр необязателен; если он не указан, путь к файлу keytab сервиса должен быть задан в переменной окружения `KRB5_KTNAME`.

Пример (добавляется в `config.xml`):

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

С указанием субъекта:

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

При фильтрации по realm:

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

<Note>
  Можно определить только один раздел `kerberos`. Наличие нескольких разделов `kerberos` приведёт к отключению аутентификации Kerberos в ClickHouse.
</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-интерфейс могут быть *керберизованы* (с использованием механизма GSS-SPNEGO).

Формат имени субъекта Kerberos обычно выглядит так:

* *primary/instance\@REALM*

Часть */instance* может встречаться ноль или более раз. **Чтобы аутентификация прошла успешно, ожидается, что часть *primary* в каноническом имени субъекта инициатора будет совпадать с именем керберизованного пользователя**.

<div id="enabling-kerberos-in-users-xml">
  ### Включение Kerberos в `users.xml`
</div>

Чтобы включить аутентификацию Kerberos для пользователя, укажите в определении пользователя секцию `kerberos` вместо `password` или аналогичных секций.

Параметры:

* `realm` — realm, который используется для ограничения аутентификации только теми запросами, у которых realm инициатора совпадает с ним.
  * Этот параметр необязателен; если его не указать, дополнительная фильтрация по realm применяться не будет.

Пример (добавляется в `users.xml`):

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

<Note>
  Обратите внимание, что аутентификацию Kerberos нельзя использовать вместе с каким-либо другим механизмом аутентификации. Наличие любых других секций, например `password`, наряду с `kerberos` приведет к остановке ClickHouse.
</Note>

<Info>
  **Напоминание**

  Обратите внимание: теперь, когда пользователь `my_user` использует `kerberos`, Kerberos должен быть включен в основном файле `config.xml`, как описано ранее.
</Info>

<div id="enabling-kerberos-using-sql">
  ### Включение Kerberos с помощью SQL
</div>

Когда в ClickHouse включена [система управления доступом и учётными записями через SQL](/ru/concepts/features/security/access-rights#access-control-usage), пользователей, идентифицируемых с помощью Kerberos, также можно создавать с помощью команд SQL.

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

...или без фильтрации по realm:

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