Перейти к основному содержимому
Перейти к основному содержимому

Создание Пользователей и Ролей в ClickHouse

ClickHouse поддерживает управление контролем доступа на основе подхода RBAC.

Сущности доступа ClickHouse:

Вы можете настраивать сущности доступа с помощью:

Мы рекомендуем использовать рабочий процесс на основе SQL. Оба метода конфигурации работают одновременно, поэтому, если вы используете файлы конфигурации сервера для управления учетными записями и правами доступа, вы можете плавно переключиться на рабочий процесс на основе SQL.

примечание

Вы не можете управлять одной и той же сущностью доступа обоими методами конфигурации одновременно.

примечание

Если вы ищете управление пользователями консоли ClickHouse Cloud, пожалуйста, обратитесь к этой странице.

Чтобы увидеть всех пользователей, роли, профили и т.д. и все их привилегии, используйте оператор SHOW ACCESS.

Обзор

По умолчанию сервер ClickHouse предоставляет учетную запись пользователя default, которой не разрешено использовать управление доступом и учетными записями на основе SQL, но она имеет все права и разрешения. Учетная запись пользователя default используется в любых случаях, когда имя пользователя не указано, например, при входе от клиента или в распределенных запросах. В обработке распределённых запросов используется учетная запись пользователя по умолчанию, если в конфигурации сервера или кластера не указаны свойства пользователя и пароля.

Если вы только начали использовать ClickHouse, рассмотрите следующий сценарий:

  1. Включите SQL-управление доступом и учетными записями для учетной записи default.
  2. Войдите в учетную запись пользователя default и создайте всех необходимых пользователей. Не забудьте создать учетную запись администратора (GRANT ALL ON *.* TO admin_user_account WITH GRANT OPTION).
  3. Ограничьте разрешения для учетной записи default и отключите управление доступом и учетными записями на основе SQL для неё.

Свойства Текущего Решения

  • Вы можете предоставлять разрешения для баз данных и таблиц, даже если они не существуют.
  • Если таблица удалена, все привилегии, соответствующие этой таблице, не отзываются. Это означает, что даже если вы позже создадите новую таблицу с тем же именем, все привилегии останутся действительными. Чтобы отозвать привилегии, соответствующие удаленной таблице, необходимо выполнить, например, запрос REVOKE ALL PRIVILEGES ON db.table FROM ALL.
  • Для привилегий нет настроек срока действия.

Учетная Запись Пользователя

Учетная запись пользователя — это сущность доступа, которая позволяет авторизовать кого-то в ClickHouse. Учетная запись пользователя содержит:

  • Идентификационную информацию.
  • Привилегии, которые определяют объем запросов, которые пользователь может выполнять.
  • Хосты, которым разрешено подключение к серверу ClickHouse.
  • Назначенные и роли по умолчанию.
  • Настройки с ограничениями, применяемыми по умолчанию при входе пользователя.
  • Назначенные профили настроек.

Привилегии могут быть предоставлены учетной записи пользователя с помощью запроса GRANT или присвоением ролей. Чтобы отозвать привилегии у пользователя, ClickHouse предоставляет запрос REVOKE. Чтобы перечислить привилегии для пользователя, используйте оператор SHOW GRANTS.

Запросы управления:

Применение Настроек

Настройки могут быть настроены по-разному: для учетной записи пользователя, в его назначенных ролях и в профилях настроек. При входе пользователя, если настройка настроена для различных сущностей доступа, значение и ограничения этой настройки применяются следующим образом (от более высокого к более низкому приоритету):

  1. Настройки учетной записи пользователя.
  2. Настройки для ролей по умолчанию учетной записи пользователя. Если настройка настроена в некоторых ролях, то порядок применения настройки не определен.
  3. Настройки из профилей настроек, назначенных пользователю или его ролям по умолчанию. Если настройка настроена в некоторых профилях, то порядок применения настройки не определен.
  4. Настройки, применяемые по умолчанию ко всему серверу или из профиля по умолчанию.

Роль

Роль — это контейнер для сущностей доступа, которые могут быть предоставлены учетной записи пользователя.

Роль содержит:

  • Привилегии
  • Настройки и ограничения
  • Список назначенных ролей

Запросы управления:

Привилегии могут быть предоставлены роли с помощью запроса GRANT. Чтобы отозвать привилегии у роли, ClickHouse предоставляет запрос REVOKE.

Политика Строк

Политика строк — это фильтр, который определяет, какие строки доступны пользователю или роли. Политика строк содержит фильтры для одной конкретной таблицы, а также список ролей и/или пользователей, которые должны использовать эту политику строк.

примечание

Политики строк имеют смысл только для пользователей с доступом только для чтения. Если пользователи могут изменять таблицы или копировать партиции между таблицами, это нарушает ограничения политик строк.

Запросы управления:

Профиль Настроек

Профиль настроек — это набор настроек. Профиль настроек содержит настройки и ограничения, а также список ролей и/или пользователей, к которым применяется этот профиль.

Запросы управления:

Квота

Квота ограничивает использование ресурсов. См. Квоты.

Квота содержит набор ограничений для некоторых периодов, а также список ролей и/или пользователей, которые должны использовать эту квоту.

Запросы управления:

Включение Управления Доступом и Учетными Записями на Основе SQL

  • Настройте каталог для хранения конфигурации.

    ClickHouse хранит конфигурации сущностей доступа в папке, установленной в параметре конфигурации сервера access_control_path.

  • Включите управление доступом и учетными записями на основе SQL для как минимум одной учетной записи пользователя.

    По умолчанию управление доступом и учетными записями на основе SQL отключено для всех пользователей. Вам необходимо настроить как минимум одного пользователя в файле конфигурации users.xml и установить значения настроек access_management, named_collection_control, show_named_collections и show_named_collections_secrets на 1.

Определение Пользователей и Ролей SQL

подсказка

Если вы работаете в ClickHouse Cloud, пожалуйста, смотрите Управление доступом в облаке.

Эта статья показывает основы определения пользователей и ролей SQL и применения этих привилегий и разрешений к базам данных, таблицам, строкам и колонкам.

Включение Режима Пользователя SQL

  1. Включите режим пользователя SQL в файле users.xml под пользователем <default>:

    примечание

    Учетная запись default — это единственный пользователь, который создается при новой установке, и она также является учетной записью, используемой для межузловых коммуникаций по умолчанию.

    В производственной среде рекомендуется отключить этого пользователя, как только межузловая связь будет настроена с помощью SQL-администратора и межузловые коммуникации будут установлены с помощью <secret>, учетных данных кластера и/или учетных данных межузловой HTTP и транспортного протокола, так как учетная запись default используется для межузловой связи.

  2. Перезапустите узлы, чтобы применить изменения.

  3. Запустите клиент ClickHouse:

Определение пользователей

  1. Создайте учетную запись администратора SQL:
  2. Предоставьте новому пользователю полные административные права:

Права ALTER

Эта статья направлена на то, чтобы дать вам лучшее понимание того, как определять права, и как права работают при использовании операторов ALTER для привилегированных пользователей.

Операторы ALTER делятся на несколько категорий, некоторые из которых являются иерархическими, а некоторые — нет, и их необходимо явно определять.

Пример настройки БД, таблицы и пользователя

  1. С администратором создайте пример пользователя:
  1. Создайте пример базы данных:
  1. Создайте пример таблицы:
  1. Создайте пример пользователя-администратора для предоставления/отзыва привилегий:
примечание

Чтобы предоставить или отозвать привилегии, у администратора должна быть привилегия WITH GRANT OPTION. Например:

Чтобы GRANT или REVOKE привилегии, пользователь должен сначала иметь эти привилегии.

Предоставление или отзыв привилегий

Иерархия ALTER:

  1. Предоставление привилегий ALTER пользователю или роли:

Использование GRANT ALTER on *.* TO my_user будет касаться только верхнеуровневых ALTER TABLE и ALTER VIEW, другие операторы ALTER должны быть предоставлены или отозваны индивидуально.

Например, предоставление базовой привилегии ALTER:

Результирующий набор привилегий:

Это предоставит все разрешения из ALTER TABLE и ALTER VIEW из приведенного выше примера, однако это не предоставит некоторые другие разрешения ALTER, такие как ALTER ROW POLICY (обратитесь к иерархии, и вы увидите, что ALTER ROW POLICY не является дочерним элементом ALTER TABLE или ALTER VIEW). Эти привилегии должны быть явно предоставлены или отозваны.

Если нужна только подмножество привилегий ALTER, то каждую из них можно предоставить отдельно, если у привилегии есть под-привилегии, то они будут также предоставлены автоматически.

Например:

Привилегии будут установлены как:

Это также дает следующие под-привилегии:

  1. Отзыв привилегий ALTER у пользователей и ролей.

Оператор REVOKE работает аналогично оператору GRANT.

Если пользователю/роли была предоставлена под-привилегия, вы можете отозвать эту под-привилегию непосредственно или отозвать привилегию более высокого уровня, которую она наследует.

Например, если пользователю была предоставлена привилегия ALTER ADD COLUMN:

Привилегия может быть отозвана индивидуально:

Или может быть отозвана от любого из верхних уровней (отозвать все под-привилегии COLUMN):

Дополнительно

Привилегии должны предоставляться пользователем, который обладает не только WITH GRANT OPTION, но и самими привилегиями.

  1. Чтобы предоставить пользователю-администратору привилегию и также разрешить ему управлять набором привилегий, ниже приведен пример:

Теперь пользователь может предоставлять или отозвать ALTER COLUMN и все под-привилегии.

Тестирование

  1. Добавьте привилегию SELECT:
  1. Добавьте привилегию добавления колонки пользователю:
  1. Войдите с ограниченной учетной записью:
  1. Протестируйте добавление колонки:
  1. Протестируйте удаление колонки:
  1. Тестирование администратора изменения путем предоставления права:
  1. Войдите с учетной записью администратора изменения:
  1. Предоставьте под-привилегию:
  1. Протестируйте предоставление привилегии, которую учетная запись администратора изменения не имеет, это не под-привилегия предоставлений для администратора.

Резюме Привилегии ALTER являются иерархическими для ALTER с таблицами и представлениями, но не для других операторов ALTER. Привилегии могут быть заданы на детальном уровне или группой привилегий, а также отозваны аналогично. Пользователь, который предоставляет или отзывает, должен обладать WITH GRANT OPTION, чтобы устанавливать привилегии пользователям, включая самих действующих пользователей, и должен уже иметь данную привилегию. Действующий пользователь не может отозвать свои собственные привилегии, если он не обладает привилегией возможности предоставления.