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