Skip to content

Управление пользователем

В Managed ClickHouse управлять пользователями можно с помощью SQL-запросов. С полным списком SQL-операторов ClickHouse вы можете ознакомиться в официальной документации ClickHouse.

Посмотреть список пользователей в кластере

Запросите список пользователей из системной таблицы system.users, которая содержит метаданные обо всех пользователях. Для этого используйте оператор SELECT и виртуальный движок clusterAllReplicas, который выполняет запрос к указанной таблице на всех узлах всех шардов заданного кластера.

  1. Подключитесь к кластеру.

  2. Выполните запрос:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

    Будет выведен список пользователей на каждом узле. Если списки пользователей на каждом узле одинаковые, значит пользователи синхронизированы.

Посмотреть информацию о конкретном пользователе

Запросите данные о пользователе из системной таблицы system.users по его имени. Для просмотра используйте оператор SELECT.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Выполните запрос:

    sql
    SELECT *
    FROM clusterAllReplicas('{cluster}', system.users)
    WHERE name = '<имя пользователя>'
    LIMIT 1;

    Здесь условие LIMIT со значением 1 возвращает первую найденную запись из таблицы system.users.

Создать пользователя

Для создания пользователя используйте оператор CREATE.

  1. Подключитесь к кластеру.

  2. Выполните запрос:

    sql
    CREATE USER [IF NOT EXISTS] <имя пользователя>
    ON CLUSTER '<имя кластера>'
    IDENTIFIED BY '<пароль>';

    Условия в запросе:

    • IF NOT EXISTS — предотвращает ошибку, если пользователь с таким именем уже существует.
    • ON CLUSTER — создает пользователя на всех узлах заданного кластера.
    • IDENTIFIED — задает, как пользователь будет проходить аутентификацию.

Назначить роль пользователю

Для операции используйте оператор GRANT.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Узнайте имя роли:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.roles);
  4. Выполните запрос:

    sql
    GRANT <имя роли> TO <имя пользователя> ON CLUSTER '<имя кластера>';

    Пользователь получит все привилегии, выданные роли. Изменения применятся на всех узлах.

Выдать привилегию пользователю

Для операции используйте оператор GRANT.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);
  3. Выполните запрос:

    sql
    GRANT <привилегия> TO <имя пользователя> ON CLUSTER '<имя кластера>';

Посмотреть роли пользователя

Запросите список назначенных пользователю ролей из системной таблицы system.users по имени пользователя. Для просмотра используйте оператор SELECT.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Выполните запрос:

    sql
    SELECT granted_roles
    FROM system.users
    WHERE name = '<имя пользователя>';

Отозвать роль или привилегию у пользователя

Для операции используйте оператор REVOKE.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Узнайте имя роли:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.roles);
  4. Выполните запрос:

    sql
    REVOKE <имя роли или привилегия> FROM <имя пользователя> ON CLUSTER '<имя кластера>';

Назначить профиль настроек пользователю

Важно

Назначайте профиль настроек или напрямую пользователю, или только одной из его ролей. Если для пользователя действуют сразу несколько профилей, ClickHouse произвольно применит только один из них.

Для операции используйте оператор ALTER USER.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Узнайте имя профиля:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.settings_profiles);
  4. Выполните запрос:

    sql
    ALTER USER <имя пользователя>
    ON CLUSTER '<имя кластера>'
    SETTINGS PROFILE = '<имя профиля>';

    Пользователь будет использовать указанный профиль во всех новых сессиях. Изменения применятся на всех узлах.

    Также вы можете названить пользователю профиль настроек при создании профиля.

Посмотреть профиль настроек пользователя

Запросите информацию о профиле, назначенном пользователю, из системной таблицы system.users. Для просмотра используйте оператор SELECT.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Выполните запрос:

    sql
    SELECT name, settings_profile
    FROM clusterAllReplicas('{cluster}', system.users)
    WHERE name = '<имя пользователя>';

    В поле settings_profile будет указано имя профиля, назначенного пользователю. Если профиль не назначен, поле будет пустым.

Отозвать профиль настроек у пользователя

Важно

После отзыва пользователю будет присвоен профиль настроек default. Убедитесь, что его достаточно для выполнения задач.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Выполните запрос:

    sql
    ALTER USER <имя пользователя>
    ON CLUSTER '<имя кластера>'
    SETTINGS PROFILE = NONE;

Удалить пользователя

Для удаления пользователя используйте оператор DROP.

  1. Подключитесь к кластеру.

  2. Узнайте имя пользователя:

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);

    Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.

  3. Выполните запрос:

    sql
    DROP USER [IF EXISTS] <имя пользователя> ON CLUSTER '<имя кластера>' SYNC;

    Условия в запросе:

    • IF EXISTS — предотвращает ошибку, если пользователя с таким именем не существует.
    • ON CLUSTER — удаляет пользователя на всех узлах заданного кластера.
    • SYNC — гарантирует, что команда завершится только после применения изменений на всех узлах.