При выполнении SET ROLE в SQL Console ClickHouse Cloud может показаться, что роль меняется для одного запроса, а для следующего возвращается к прежней. Если разрешения должны сохраняться между запросами и сеансами, используйте роль SQL Console для пользователя.
Симптомы
Возможны один или несколько из следующих симптомов:
- После выполнения
SET ROLE sql_console_developerпоследующие запросы по-прежнему выполняются с рольюsql_console_read_only. - Результаты
currentRoles,enabledRolesиdefaultRolesразличаются от запроса к запросу. - При совместном выполнении
SET ROLEи другого запроса выбранная роль сохраняется не всегда. SHOW GRANTSвыводит ожидаемые роли, но их разрешения не действуют.
Проверить текущего пользователя и роли можно с помощью:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();Почему это происходит
SQL Console отправляет запросы через HTTP-соединения без сохранения состояния в сервис ClickHouse Cloud с несколькими репликами. Не гарантируется, что последовательные запросы будут использовать одно и то же соединение или реплику.
SET ROLE изменяет роли, включенные для текущего сеанса. Это состояние сеанса не сохраняется для последующих запросов SQL Console. Поэтому последующий запрос может выполняться без роли, включенной предыдущим запросом.
Поэтому не используйте SET ROLE в качестве постоянного механизма контроля доступа в SQL Console.
Как работают роли пользователей в SQL Console
Когда пользователь открывает SQL Console, ClickHouse Cloud создаёт пользователя базы данных по следующему соглашению об именовании:
sql-console:user@example.comClickHouse Cloud также проверяет наличие роли базы данных, имя которой соответствует следующему соглашению:
sql-console-role:user@example.comКогда такая роль существует, ClickHouse Cloud назначает её соответствующему пользователю SQL Console. Это поддерживаемый способ предоставить постоянные настраиваемые разрешения отдельному пользователю SQL Console.
| Сущность | Назначение | Постоянная |
|---|---|---|
sql-console:<email> |
Пользователь базы данных, создаваемый, когда пользователь открывает SQL Console | Да, управляется ClickHouse Cloud |
sql_console_admin and sql_console_read_only |
Встроенные роли SQL Console | Да, управляется ClickHouse Cloud |
sql-console-role:<email> |
Настраиваемая роль для отдельного пользователя, созданная администратором | Да, применяется при входе пользователя |
Настройка постоянных разрешений
Выполните следующие команды от имени пользователя с административными привилегиями в сервисе, например пользователя SQL Console с ролью sql_console_admin или другого пользователя с привилегией ACCESS MANAGEMENT.
Создание пользовательской роли
В следующем примере создаётся пользовательская роль sql_console_developer, которой предоставляются разрешения для my_database:
CREATE ROLE IF NOT EXISTS sql_console_developer;
GRANT SELECT, INSERT, CREATE TABLE
ON my_database.*
TO sql_console_developer;sql_console_developer — пример роли, а не встроенная роль ClickHouse Cloud. Вместо неё можно использовать существующую пользовательскую роль с необходимыми пользователю разрешениями.
Создание роли SQL Console для пользователя
Создайте роль, имя которой содержит точный адрес электронной почты пользователя:
CREATE ROLE IF NOT EXISTS `sql-console-role:user@example.com`;Обратные кавычки обязательны, поскольку имя роли содержит специальные символы.
Предоставление пользовательской роли
Предоставьте нужную роль роли SQL Console для пользователя:
GRANT sql_console_developer
TO `sql-console-role:user@example.com`;При необходимости можно предоставить несколько ролей:
GRANT sql_console_developer, sql_console_read_only
TO `sql-console-role:user@example.com`;Начало нового сеанса SQL Console
Попросите пользователя выйти из SQL Console и снова войти в неё либо обновить вкладку браузера. В новом сеансе ClickHouse Cloud применяет sql-console-role:user@example.com к sql-console:user@example.com; оператор SET ROLE не требуется.
Проверьте активные роли:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();Результаты должны включать разрешения, предоставленные через sql-console-role:user@example.com.
Не изменяйте управляемые роли
Не изменяйте sql_console_admin и sql_console_read_only, чтобы назначить настраиваемые разрешения. ClickHouse Cloud управляет этими встроенными ролями. Для назначения разрешений отдельным пользователям используйте sql-console-role:<email>.
Примеры общего управления ролями см. в разделе Распространённые запросы для управления доступом.