Запросы управления доступом
Если вы работаете с самоуправляемым 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 пользователей и ролей, а также представлены шаги по установке и изменению привилегий для пользователей и ролей. Для более подробной информации по каждому пункту, пожалуйста, обратитесь к нашим руководствам пользователей и справочной документации.