Skip to content

Управление профилем настроек

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

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

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

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

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

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

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

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

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

Запросите данные о профиле из системных таблиц system.settings_profiles и system.settings_profile_elements по его имени. Таблица system.settings_profiles содержит метаданные профиля настроек, а таблица system.settings_profile_elements — конкретные настройки профиля. Для просмотра используйте оператор SELECT.

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

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

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

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

  3. Для просмотра метаданных выполните запрос:

    sql
    SELECT *
    FROM clusterAllReplicas('{cluster}', system.settings_profiles)
    WHERE name = '<имя профиля>'
    LIMIT 1;

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

  4. Для просмотра настроек профиля выполните запрос:

    sql
    SELECT 
        hostName(),
        setting_name,
        value,
        min_value,
        max_value,
        readonly
    FROM clusterAllReplicas('{cluster}', system.settings_profile_elements)
    WHERE profile_name = '<имя профиля>'
    ORDER BY hostName(), index;

    Здесь:

    • profile_name — имя профиля настроек;
    • setting_name — название настройки;
    • value — значение настройки;
    • min_value и max_value — допустимые границы значений (если заданы);
    • readonly — флаг, указывающий можно ли изменять настройку (1 — нельзя, 0 — можно);
    • условие ORDER BY сортирует результаты по имени узла кластера hostName() и порядковому номеру настройки в профиле index.

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

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

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

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

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

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

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

    sql
    SELECT DISTINCT
        hostName(),
        user_name,
        role_name,
        profile_name
    FROM clusterAllReplicas('{cluster}', system.settings_profile_elements)
    WHERE profile_name = '<имя профиля>'
      AND (user_name IS NOT NULL OR role_name IS NOT NULL)
    ORDER BY hostName(), user_name, role_name;

    Здесь:

    • оператор DISTINCT устраняет дубликаты строк, если у пользователя или роли на разных узлах кластера одинаковый профиль;
    • условие AND (user_name IS NOT NULL OR role_name IS NOT NULL) оставляет только те строки, где профиль назначен пользователю или роли;
    • условие ORDER BY упорядочивает результаты по именам кластера, пользователя и роли.

Создать профиль настроек

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

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

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

    sql
    SELECT hostName(), name 
    FROM clusterAllReplicas('{cluster}', system.users);
  3. Узнайте имя роли:

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

    sql
    CREATE SETTINGS PROFILE [IF NOT EXISTS] <имя профиля>
    ON CLUSTER '<имя кластера>'
    SETTINGS
      <настройка 1> = <значение 1>,
      <настройка 2> = <значение 2>,
      ...
    TO <имя пользователя>, <имя роли>;

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

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

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

    Пример запроса без назначения профиля роли или пользователю
    sql
    CREATE SETTINGS PROFILE [IF NOT EXISTS] <имя профиля>
    ON CLUSTER '<имя кластера>'
    SETTINGS
      max_memory_usage = 5000000000, # Максимальный объем оперативной памяти = 5000000000 Б (5 ГБ)
      max_execution_time = 300, # Максимальное время выполнения запроса = 300 с
      readonly = 1, # Разрешено только чтение данных
      log_queries = 1; # Включено логирование всех запросов
    Пример запроса с назначением профиля роли и пользователю
    sql
    CREATE SETTINGS PROFILE secure_analyst_profile
    ON CLUSTER '<имя кластера>'
    SETTINGS
      max_memory_usage = 5000000000, # Максимальный объем оперативной памяти = 5000000000 Б (5 ГБ)
      readonly = 1, # Разрешено только чтение данных
    TO user_1, role_3;

Удалить профиль настроек

Важно

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

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

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

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

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

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

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

    sql
    DROP SETTINGS PROFILE [IF EXISTS] <имя профиля> ON CLUSTER '<имя кластера>' SYNC;

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

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