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