> ## 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/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](/docs/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
```
