Управление ролями
Роли ClickHouse регулируют доступ к действиям внутри кластера. Например, доступ к данным, выполнение запросов и т.д.
Управлять ролями ClickHouse можно с помощью SQL-запросов. С полным списком SQL-операторов ClickHouse вы можете ознакомиться в официальной документации ClickHouse.
Посмотреть список ролей в кластере
Заголовок раздела «Посмотреть список ролей в кластере»Запросите список ролей из системной таблицы system.roles, которая содержит метаданные обо всех ролях. Для этого используйте оператор SELECT и виртуальный движок clusterAllReplicas, который выполняет запрос к указанной таблице на всех узлах всех шардов заданного кластера.
Подключитесь к кластеру.
Выполните запрос:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Будет выведен список ролей на каждом узле. Если списки ролей на каждом узле одинаковые, значит роли синхронизированы.
Посмотреть информацию о конкретной роли
Заголовок раздела «Посмотреть информацию о конкретной роли»Запросите из системной таблицы system.roles данные о роли по ее имени. Для просмотра используйте оператор SELECT.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql SELECT *FROM clusterAllReplicas('{cluster}', system.roles)WHERE name = '<имя роли>'LIMIT 1;Здесь условие
LIMITсо значением1возвращает первую найденную запись из таблицыsystem.roles.
Создать роль
Заголовок раздела «Создать роль»Для создания роли используйте оператор CREATE.
Подключитесь к кластеру.
Выполните запрос:
sql CREATE ROLE [IF NOT EXISTS] <имя роли> ON CLUSTER '<имя кластера>';Условия в запросе:
IF NOT EXISTS— предотвращает ошибку, если роль с таким именем уже существует.ON CLUSTER— создает роль на всех узлах заданного кластера.
Выдать привилегии роли
Заголовок раздела «Выдать привилегии роли»Для операции используйте оператор GRANT.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql GRANT <привилегия> ON <объект> TO <имя роли> ON CLUSTER '<имя кластера>';
Посмотреть привилегии роли
Заголовок раздела «Посмотреть привилегии роли»Для просмотра используйте оператор SHOW.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql SHOW GRANTS FOR <имя роли>;
Отозвать привилегии у роли
Заголовок раздела «Отозвать привилегии у роли»Для операции используйте оператор REVOKE.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql REVOKE <привилегия> ON <объект> FROM <имя роли> ON CLUSTER '<имя кластера>';
Назначить профиль настроек роли
Заголовок раздела «Назначить профиль настроек роли»Для операции используйте оператор ALTER ROLE.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Узнайте имя профиля:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.settings_profiles);Выполните запрос:
sql ALTER ROLE <имя роли>ON CLUSTER '<имя кластера>'SETTINGS PROFILE = '<имя профиля>';Все пользователи с этой ролью будут использовать указанный профиль.
Также вы можете названить роли профиль настроек при создании профиля.
Посмотреть профиль настроек роли
Заголовок раздела «Посмотреть профиль настроек роли»Запросите информацию о профиле, назначенном роли, из системной таблицы system.roles. Для просмотра используйте оператор SELECT.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql SELECT name, settings_profileFROM clusterAllReplicas('{cluster}', system.roles)WHERE name = '<имя роли>';В поле
settings_profileбудет указано имя профиля, назначенного роли. Если профиль не назначен, поле будет пустым.
Отозвать профиль настроек у роли
Заголовок раздела «Отозвать профиль настроек у роли»Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql ALTER ROLE <имя роли>ON CLUSTER '<имя кластера>'SETTINGS PROFILE = NONE;
Настроить наследование роли
Заголовок раздела «Настроить наследование роли»Для операции используйте оператор GRANT.
Подключитесь к кластеру.
Узнайте имя роли-источника:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Узнайте имя роли-наследника:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Выполните запрос:
sql GRANT <роль-источник> TO <роль-наследник> ON CLUSTER '<имя кластера>';Роль-наследник будет иметь привилегии роли-источника, даже если привилегии роли-источника изменятся.
Отозвать наследование роли
Заголовок раздела «Отозвать наследование роли»Для операции используйте оператор REVOKE.
Подключитесь к кластеру.
Узнайте имя роли-источника:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Узнайте имя роли-наследника:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Выполните запрос:
sql REVOKE <роль-источник> FROM <роль-наследник> ON CLUSTER '<имя кластера>';Роль-наследник перестанет наследовать привилегии роли-источника.
Удалить роль
Заголовок раздела «Удалить роль»Для удаления роли используйте оператор DROP.
Подключитесь к кластеру.
Узнайте имя роли:
sql SELECT hostName(), nameFROM clusterAllReplicas('{cluster}', system.roles);Имя кластера автоматически определяется макросом
{cluster}, заданным в конфигурации.Выполните запрос:
sql DROP ROLE [IF EXISTS] <имя роли> ON CLUSTER '<имя кластера>' SYNC;Условия в запросе:
IF EXISTS— предотвращает ошибку, если роли с таким именем не существует.ON CLUSTER— удаляет роль на всех узлах заданного кластера.SYNC— гарантирует, что команда завершится только после применения изменений на всех узлах.
Роль удалится, а пользователи потеряют привилегии, полученные с этой ролью.