Управление профилем настроек
В Managed ClickHouse управлять профилями настроек можно с помощью SQL-запросов. С полным списком SQL-операторов ClickHouse вы можете ознакомиться в официальной документации ClickHouse.
Посмотреть список профилей настроек в кластере
Запросите список профилей из системной таблицы system.settings_profiles, которая содержит метаданные обо всех профилях настроек. Для этого используйте оператор SELECT и виртуальный движок clusterAllReplicas, который выполняет запрос к указанной таблице на всех узлах всех шардов заданного кластера.
Подключитесь к кластеру.
Выполните запрос:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.settings_profiles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Будет выведен список профилей на каждом узле. Если списки профилей на каждом узле одинаковые, значит профили синхронизированы.
Посмотреть информацию о конкретном профиле настроек
Запросите данные о профиле из системных таблиц system.settings_profiles и system.settings_profile_elements по его имени. Таблица system.settings_profiles содержит метаданные профиля настроек, а таблица system.settings_profile_elements — конкретные настройки профиля. Для просмотра используйте оператор SELECT.
Подключитесь к кластеру.
Узнайте имя профиля:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.settings_profiles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Для просмотра метаданных выполните запрос:
sqlSELECT * FROM clusterAllReplicas('{cluster}', system.settings_profiles) WHERE name = '<имя профиля>' LIMIT 1;Здесь условие
LIMITсо значением1возвращает первую найденную запись из таблицыsystem.settings_profiles.Для просмотра настроек профиля выполните запрос:
sqlSELECT 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.
Подключитесь к кластеру.
Узнайте имя профиля:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.settings_profiles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sqlSELECT 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.
Подключитесь к кластеру.
Узнайте имя пользователя:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.users);Узнайте имя роли:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.roles);Выполните запрос:
sqlCREATE SETTINGS PROFILE [IF NOT EXISTS] <имя профиля> ON CLUSTER '<имя кластера>' SETTINGS <настройка 1> = <значение 1>, <настройка 2> = <значение 2>, ... TO <имя пользователя>, <имя роли>;Условия в запросе:
IF NOT EXISTS— предотвращает ошибку, если профиль с таким именем уже существует.ON CLUSTER— создает профиль на всех узлах заданного кластера.SETTINGS— секция, в которой задаются нужные параметры и значения.
Также вы можете назначить профиль настроек пользователю или роли после создания.
Пример запроса без назначения профиля роли или пользователю
sqlCREATE SETTINGS PROFILE [IF NOT EXISTS] <имя профиля> ON CLUSTER '<имя кластера>' SETTINGS max_memory_usage = 5000000000, # Максимальный объем оперативной памяти = 5000000000 Б (5 ГБ) max_execution_time = 300, # Максимальное время выполнения запроса = 300 с readonly = 1, # Разрешено только чтение данных log_queries = 1; # Включено логирование всех запросовПример запроса с назначением профиля роли и пользователю
sqlCREATE SETTINGS PROFILE secure_analyst_profile ON CLUSTER '<имя кластера>' SETTINGS max_memory_usage = 5000000000, # Максимальный объем оперативной памяти = 5000000000 Б (5 ГБ) readonly = 1, # Разрешено только чтение данных TO user_1, role_3;
Удалить профиль настроек
Важно
Убедитесь, что удаляемый профиль не используется пользователями и ролями. Иначе им будет присвоен профиль настроек default. Его ограничения могут не соответствовать потребностям пользователей.
Для удаления профиля используйте оператор DROP.
Подключитесь к кластеру.
Узнайте имя профиля:
sqlSELECT hostName(), name FROM clusterAllReplicas('{cluster}', system.settings_profiles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sqlDROP SETTINGS PROFILE [IF EXISTS] <имя профиля> ON CLUSTER '<имя кластера>' SYNC;Условия в запросе:
IF EXISTS— предотвращает ошибку, если профиля с таким именем не существует.ON CLUSTER— удаляет профиль на всех узлах заданного кластера.SYNC— гарантирует, что команда завершится только после применения изменений на всех узлах.