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