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