Перейти к содержимому

Управление ролями

Роли ClickHouse регулируют доступ к действиям внутри кластера. Например, доступ к данным, выполнение запросов и т.д.

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

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    SELECT *
    FROM system.roles
    WHERE name = '<имя роли>'
    LIMIT 1;

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

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    CREATE ROLE [IF NOT EXISTS] <имя роли>;

    В запросе условие IF NOT EXISTS предотвращает ошибку, если роль с таким именем уже существует.

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    GRANT <привилегия> ON <объект> TO <имя роли>;

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    SHOW GRANTS FOR <имя роли>;

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    REVOKE <привилегия> ON <объект> FROM <имя роли>;
Важно

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

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Узнайте имя профиля:

    sql
    SELECT name
    FROM system.settings_profiles
    ORDER BY name;
  4. Выполните запрос:

    sql
    ALTER ROLE <имя роли>
    SETTINGS PROFILE = '<имя профиля>';

Все пользователи с этой ролью будут использовать указанный профиль.

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

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    SELECT name, settings_profile
    FROM system.roles
    WHERE name = '<имя роли>';

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

Важно

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    ALTER ROLE <имя роли>
    SETTINGS PROFILE = NONE;

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя роли-источника:

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Узнайте имя роли-наследника:

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  4. Выполните запрос:

    sql
    GRANT <роль-источник> TO <роль-наследник>;

Роль-наследник будет иметь привилегии роли-источника, даже если привилегии роли-источника изменятся.

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя роли-источника:

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Узнайте имя роли-наследника:

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  4. Выполните запрос:

    sql
    REVOKE <роль-источник> FROM <роль-наследник>;

Роль-наследник перестанет наследовать привилегии роли-источника.

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

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

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

    sql
    SELECT name
    FROM system.roles
    ORDER BY name;
  3. Выполните запрос:

    sql
    DROP ROLE [IF EXISTS] <имя роли>;

    В запросе IF EXISTS предотвращает ошибку, если роли с таким именем не существует.

Роль удалится, а пользователи потеряют привилегии, полученные с этой ролью.