Общие запросы управления доступом
Если вы работаете с самоуправляемым 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 консоли, соответствующие пространству имен sql-console-role:<email>. Например:
Когда совпадающая роль обнаруживается, она будет назначена пользователю вместо стандартных ролей. Это вводит более сложные конфигурации контроля доступа, такие как создание ролей sql_console_sa_role и sql_console_pm_role, и их назначение конкретным пользователям. Например:
Проверка полномочий админа
Выйдите из системы как пользователь default и войдите заново как пользователь clickhouse_admin.
Все из следующего должно выполниться успешно:
Обычные пользователи
Пользователи должны иметь необходимые полномочия и не все должны быть администратором. Остальная часть этого документа предоставляет примерные сценарии и необходимые роли.
Подготовка
Создайте эти таблицы и пользователей для использования в примерах.
Создание тестовой базы данных, таблицы и строк
- 
Создайте тестовую базу данных 
- 
Создайте таблицу 
- 
Заполните таблицу образцовыми строками 
- 
Проверьте таблицу: 
- 
Создайте обычного пользователя, который будет использоваться для демонстрации ограничения доступа к определенным колонкам: 
- 
Создайте обычного пользователя, который будет использоваться для демонстрации ограничения доступа к строкам с определенными значениями: 
Создание ролей
С этим набором примеров:
- будут созданы роли для различных полномочий, таких как колонки и строки
- полномочия будут предоставлены ролям
- пользователи будут назначены каждой роли
Роли используются для определения групп пользователей для определенных полномочий вместо управления каждым пользователем отдельно.
- 
Создайте роль, чтобы ограничить пользователей этой роли только просмотром 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 пользователей и ролей, а также предоставлены шаги для установки и изменения полномочий пользователей и ролей. Для получения более подробной информации о каждом из них, пожалуйста, обратитесь к нашим пользовательским руководствам и справочной документации.
