Общие запросы управления доступом
Если вы работаете с самоуправляемым ClickHouse, пожалуйста, посмотрите SQL пользователи и роли.
В этой статье представлены основы определения SQL пользователей и ролей, а также применения этих привилегий и разрешений к базам данных, таблицам, строкам и столбцам.
Администратор
Сервисы ClickHouse Cloud имеют администратора, default
, который создается при создании сервиса. Пароль предоставляется при создании сервиса и может быть сброшен пользователями ClickHouse Cloud, у которых есть роль Admin.
Когда вы добавляете дополнительных SQL пользователей для вашего сервиса ClickHouse Cloud, им понадобится SQL имя пользователя и пароль. Если вы хотите, чтобы у них были привилегии на уровне администратора, назначьте новым пользователям роль default_role
. Например, добавление пользователя clickhouse_admin
:
При использовании SQL консоли ваши SQL запросы не будут выполняться от имени пользователя default
. Вместо этого запросы будут выполняться от лица пользователя с именем sql-console:${cloud_login_email}
, где cloud_login_email
— это электронная почта пользователя, который в данный момент выполняет запрос.
Эти автоматически сгенерированные пользователи SQL консоли имеют роль default
.
Аутентификация без пароля
Доступны две роли для SQL консоли: sql_console_admin
с аналогичными разрешениями к default_role
и sql_console_read_only
с правами только на чтение.
Администраторские пользователи по умолчанию получают роль sql_console_admin
, поэтому для них ничего не меняется. Однако роль sql_console_read_only
позволяет неадминистраторским пользователям иметь доступ только для чтения или полный доступ к любому экземпляру. Администратор должен настроить этот доступ. Роли могут быть настроены с использованием команд GRANT
или REVOKE
, чтобы лучше соответствовать конкретным требованиям экземпляра, и любые изменения, внесенные в эти роли, будут сохранены.
Гранулярный контроль доступа
Эта функциональность контроля доступа также может быть настроена вручную для гранулярного контроля на уровне пользователей. Прежде чем назначать новые роли sql_console_*
пользователям, должны быть созданы пользовательские роли баз данных, соответствующие пространству имен sql-console-role:<email>
. Например:
Когда будет обнаружена соответствующая роль, она будет назначена пользователю вместо стандартных ролей. Это вводит более сложные конфигурации контроля доступа, такие как создание ролей вроде sql_console_sa_role
и sql_console_pm_role
, и назначение их конкретным пользователям. Например:
Тестирование прав администратора
Выйдите из системы как пользователь default
и войдите снова как пользователь clickhouse_admin
.
Все эти команды должны выполниться успешно:
Неадминистративные пользователи
Пользователи должны иметь необходимые привилегии и не все должны быть администраторами. Остальная часть этого документа предоставляет примеры сценариев и необходимые роли.
Подготовка
Создайте эти таблицы и пользователей, которые будут использоваться в примерах.
Создание тестовой базы данных, таблицы и строк
Создание тестовой базы данных
Создание таблицы
Заполнение таблицы тестовыми строками
Создание column_user
Создайте обычного пользователя, который будет использоваться для демонстрации ограничения доступа к определенным колонкам:
Создание row_user
Создайте обычного пользователя, который будет использоваться для демонстрации ограничения доступа к строкам с определенными значениями:
Создание ролей
В этом наборе примеров:
- будут созданы роли с различными привилегиями, такими как колонки и строки
- привилегии будут предоставлены ролям
- пользователи будут назначены каждой роли
Роли используются для определения групп пользователей с определенными привилегиями вместо управления каждым пользователем отдельно.
- Создайте роль, чтобы ограничить пользователей этой роли только доступом к
column1
в базе данныхdb1
и таблицеtable1
:
- Установите привилегии для просмотра
column1
- Добавьте пользователя
column_user
в рольcolumn1_users
- Создайте роль, чтобы ограничить пользователей этой роли только доступом к выбранным строкам, в данном случае, только к строкам, содержащим
A
вcolumn1
- Добавьте пользователя
row_user
в рольA_rows_users
- Создайте политику, чтобы разрешить доступ только к тем строкам, где
column1
имеет значениеA
- Установите привилегии для базы данных и таблицы
- предоставьте явные разрешения для других ролей, чтобы они все еще имели доступ ко всем строкам
При присоединении политики к таблице система применит эту политику, и только те пользователи и роли, которые определены, смогут выполнять операции с таблицей, все остальные будут лишены каких-либо операций. Чтобы не применять ограничивающую политику строк к другим пользователям, необходимо определить другую политику, позволяющую другим пользователям и ролям иметь обычный или другие типы доступа.
Проверка
Тестирование прав роли с ограниченным доступом к колонкам
- Войдите в клиент clickhouse, используя пользователя
clickhouse_admin
- Проверьте доступ к базе данных, таблице и всем строкам с административным пользователем.
- Войдите в клиент ClickHouse, используя пользователя
column_user
- Протестируйте
SELECT
, используя все колонки
Доступ запрещен, так как указаны все колонки, а пользователь имеет доступ только к id
и column1
- Проверьте запрос
SELECT
, указав только разрешенные колонки:
Тестирование прав роли с ограниченным доступом к строкам
- Войдите в клиент ClickHouse, используя
row_user
- Просмотрите доступные строки
Убедитесь, что возвращаются только вышеуказанные две строки, строки со значением B
в column1
должны быть исключены.
Изменение пользователей и ролей
Пользователям могут быть присвоены несколько ролей для комбинации необходимых привилегий. При использовании нескольких ролей система объединит роли для определения привилегий, итогом будет то, что разрешения ролей будут кумулятивными.
Например, если одна role1
разрешает только выбор column1
, а role2
разрешает выбор column1
и column2
, тогда пользователь будет иметь доступ к обеим колонкам.
- Используя учетную запись администратора, создайте нового пользователя, ограниченного как по строкам, так и по колонкам с ролью по умолчанию
- Удалите предыдущие привилегии для роли
A_rows_users
- Разрешите роли
A_row_users
только выбор изcolumn1
- Войдите в клиент ClickHouse, используя
row_and_column_user
- Протестируйте со всеми колонками:
- Протестируйте с ограниченным набором разрешенных колонок:
Устранение неполадок
Существуют случаи, когда привилегии пересекаются или комбинируются, что приводит к неожиданным результатам. Следующие команды могут быть использованы для уточнения проблемы, используя учетную запись администратора.
Перечисление предоставлений и ролей для пользователя
Список ролей в ClickHouse
Отображение политик
Просмотр того, как была определена политика и текущие привилегии
Пример команд для управления ролями, политиками и пользователями
Следующие команды можно использовать для:
- удаления привилегий
- удаления политик
- исключения пользователей из ролей
- удаления пользователей и ролей
Запускайте эти команды как пользователь-администратор или пользователь default
Удаление привилегии из роли
Удаление политики
Исключение пользователя из роли
Удаление роли
Удаление пользователя
Резюме
В этой статье были продемонстрированы основы создания SQL пользователей и ролей, а также предоставлены шаги по настройке и изменению привилегий для пользователей и ролей. Для получения более подробной информации об этом, пожалуйста, обратитесь к нашим пользовательским руководствам и справочной документации.