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

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

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

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

Вы можете настраивать сущности доступа, используя:

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

примечание

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

примечание

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

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