Распространённые вопросы по управлению доступом
Если вы работаете с самостоятельно управляемым (self-managed) ClickHouse, см. раздел SQL-пользователи и роли.
В этой статье рассматриваются основы создания 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-консоли, соответствующие пространству имен 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-пользователей и ролей, а также приведены шаги по назначению и изменению привилегий для пользователей и ролей. Для получения более подробной информации по каждой теме обратитесь к нашим руководствам для пользователей и справочной документации.