Типовые запросы по управлению доступом
Если вы работаете с самоуправляемым ClickHouse, см. раздел SQL users and roles.
В этой статье рассматриваются основы определения SQL-пользователей и ролей, а также применения соответствующих привилегий и прав доступа к базам данных, таблицам, строкам и столбцам.
Учетная запись администратора
Сервисы ClickHouse Cloud имеют пользователя‑администратора default, который создаётся вместе с сервисом. Пароль задаётся при создании сервиса, и его могут сбросить пользователи ClickHouse Cloud с ролью Admin.
Когда вы добавляете дополнительных SQL‑пользователей для своего сервиса ClickHouse Cloud, им потребуются имя SQL‑пользователя и пароль. Если вы хотите предоставить им привилегии уровня администратора, назначьте новому пользователю (пользователям) роль default_role. Например, добавление пользователя clickhouse_admin:
При использовании SQL Console ваши SQL-команды не будут выполняться от имени пользователя default. Вместо этого команды будут выполняться от имени пользователя sql-console:${cloud_login_email}, где cloud_login_email — это адрес электронной почты пользователя, который в данный момент выполняет запрос.
Эти автоматически создаваемые пользователи SQL Console имеют роль default.
Аутентификация без пароля
Для SQL-консоли доступны две роли: sql_console_admin с такими же правами, как у default_role, и sql_console_read_only с правами только на чтение.
Пользователям‑администраторам по умолчанию назначается роль sql_console_admin, поэтому для них ничего не меняется. Однако роль sql_console_read_only позволяет предоставлять пользователям без прав администратора доступ только на чтение или полный доступ к любому экземпляру. Настроить этот доступ должен администратор. Роли можно изменять с помощью команд GRANT или REVOKE, чтобы лучше соответствовать требованиям конкретного экземпляра, и все изменения этих ролей будут сохраняться.
Детализированное управление доступом
Эту функцию управления доступом можно также настроить вручную на уровне отдельных пользователей. Прежде чем назначать пользователям новые роли sql_console_*, необходимо создать пользовательские роли базы данных для 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.
Тестирование привилегий роли с пользователем, ограниченным по строкам
Войдите в клиент ClickHouse, используя пользователя row_user
Просмотрите доступные строки
Убедитесь, что возвращаются только две строки, показанные выше; строки со значением B в column1 должны быть исключены.
Изменение пользователей и ролей
Пользователю можно назначить несколько ролей для получения нужной комбинации привилегий. При использовании нескольких ролей система объединяет их при определении привилегий, в результате права, предоставляемые ролями, будут суммироваться.
Например, если одна роль role1 разрешает выполнять SELECT только по column1, а role2 разрешает SELECT по column1 и column2, пользователь будет иметь доступ к обоим столбцам.
Используя учетную запись администратора, создайте нового пользователя с ограничением и по строкам, и по столбцам, с ролями по умолчанию
Удалите ранее выданные привилегии для роли A_rows_users
Разрешите роли A_row_users выполнять выборку только из column1
Войдите в клиент ClickHouse, используя пользователя row_and_column_user
Устранение неполадок
Иногда привилегии пересекаются или комбинируются, что приводит к неожиданным результатам. Следующие команды можно использовать для уточнения причины проблемы при работе под учетной записью администратора.
Просмотр назначенных пользователю прав и ролей
Просмотреть роли в ClickHouse
Просмотр политик
Просмотр определения политики и её текущих привилегий
Примеры команд для управления ролями, политиками и пользователями
Следующие команды можно использовать, чтобы:
- удалить привилегии
- удалить политики
- открепить пользователей от ролей
- удалить пользователей и роли
Выполняйте эти команды от имени администратора или пользователя default
Удалить привилегию у роли
Удаление политики
Отменить назначение роли пользователю
Удаление роли
Удаление пользователя
Итоги
В этой статье были рассмотрены основы создания SQL-пользователей и ролей, а также приведены шаги по назначению и изменению привилегий для пользователей и ролей. Для получения более подробной информации по каждой теме обратитесь к нашим руководствам для пользователей и справочной документации.