SET ROLE, чтобы быстро переключаться между профилями без выхода из системы и перезагрузки содержимого.
Обзор
- Сервисной учетной записи можно назначить несколько ролей, но активировать только ту, которая нужна для конкретного запроса.
- Если сервисная учетная запись скомпрометирована, злоумышленники смогут использовать только разрешения активной роли.
- Одна учетная запись может выполнять разные задачи, переключая роли, вместо того чтобы использовать отдельные учетные данные для каждой задачи.
- Разрешения можно обновить для целого класса сервисных учетных записей, изменив одну роль, а не обновляя отдельных пользователей.
- Журналы могут отслеживать, какая именно роль была активна во время запроса, что дает более ясный контекст для аудита безопасности.
- Проектируете роли, задающие допустимые границы (read_only, maintenance и т. д.)
- Выдаете их сервисной учетной записи
- При установлении соединения выбираете активную роль или роли через
SET ROLE(или параметр роли), тем самым ограничивая возможности этого сеанса
Настройте сервисную роль
1
Выдайте роли сервисной учетной записи
Сначала создайте роли с нужными привилегиями/настройками, затем выдайте их сервисной учетной записи.
2
Используйте SET ROLE, чтобы определить границы сеанса
В начале сеанса сервисная учетная запись выбирает, какие роли будут активны:или:или активировать несколько ролей:Текущие активные роли можно посмотреть в
SET ROLE активирует роли для текущего пользователя; итоговые привилегии — это объединение всех активных ролей и привилегий, напрямую выданных пользователю.Вы также можете деактивировать все роли:system.current_roles.3
Задайте роли по умолчанию для сервисной учетной записи
Чтобы сервисная учетная запись всегда запускалась в ограниченном режиме, настройте роли по умолчанию:или
4
Использование SET ROLE по HTTP / программно
Если сервисная учетная запись подключается по HTTP, вы не можете отправить
SET ROLE; SELECT ... как многооператорный запрос. Вместо этого передайте роль как query parameter:?role=… эквивалентно выполнению SET ROLE read_only_role перед оператором. Несколько параметров роли работают так же, как SET ROLE role 1, role 2.Некоторые драйверы (например, ClickHouse Connect for Python) также поддерживают настройку роли, которая отправляется с каждым запросом и используется сервером как роль сеанса.