Создание пользователей и ролей в ClickHouse
ClickHouse поддерживает управление доступом на основе подхода RBAC.
Объекты управления доступом в ClickHouse:
- Учетная запись пользователя
- Роль
- Политика строк (Row Policy)
- Профиль настроек (Settings Profile)
- Квота
Вы можете настраивать объекты доступа с помощью:
-
SQL-ориентированного подхода.
Для этого необходимо включить эту функциональность.
-
Конфигурационных файлов сервера
users.xmlиconfig.xml.
Мы рекомендуем использовать SQL-ориентированный подход. Оба метода конфигурации работают одновременно, поэтому, если вы используете конфигурационные файлы сервера для управления учетными записями и правами доступа, вы можете безболезненно перейти на подход, основанный на SQL.
Нельзя управлять одной и той же сущностью доступа одновременно с помощью обоих методов конфигурации.
Если вы хотите управлять пользователями консоли ClickHouse Cloud, обратитесь к этой странице
Чтобы просмотреть всех пользователей, роли, профили и т. д., а также все их выдачи (grants), используйте оператор SHOW ACCESS.
Обзор
По умолчанию сервер ClickHouse предоставляет учетную запись default, для которой нельзя использовать управление доступом и учетными записями на основе SQL, но которая имеет все права и разрешения. Учетная запись default используется во всех случаях, когда имя пользователя не определено, например, при входе с клиента или в распределенных запросах. При обработке распределенного запроса учетная запись default используется, если в конфигурации сервера или кластера не указаны свойства user и password.
Если вы только начали использовать ClickHouse, рассмотрите следующий сценарий:
- Включите управление доступом и учетными записями на основе SQL для пользователя
default. - Войдите под учетной записью
defaultи создайте всех необходимых пользователей. Не забудьте создать учетную запись администратора (GRANT ALL ON *.* TO admin_user_account WITH GRANT OPTION). - Ограничьте права для пользователя
defaultи отключите для него управление доступом и учетными записями на основе SQL.
Свойства текущего решения
- Вы можете выдавать права на базы данных и таблицы, даже если они еще не существуют.
- Если таблица удалена, все привилегии, соответствующие этой таблице, не отзываются. Это означает, что даже если позже вы создадите новую таблицу с тем же именем, все привилегии останутся действительными. Чтобы отозвать привилегии, соответствующие удаленной таблице, нужно выполнить, например, запрос
REVOKE ALL PRIVILEGES ON db.table FROM ALL. - Для привилегий не задаются сроки действия.
Учетная запись пользователя
Учетная запись пользователя — это объект управления доступом, который используется для аутентификации в ClickHouse. Учетная запись пользователя содержит:
- Идентификационную информацию.
- Привилегии, которые определяют область запросов, которые пользователь может выполнять.
- Хосты, с которых разрешено подключение к серверу ClickHouse.
- Назначенные роли и роли по умолчанию.
- Настройки с их ограничениями, применяемые по умолчанию при входе пользователя.
- Назначенные профили настроек.
Привилегии могут быть выданы учетной записи пользователя с помощью запроса GRANT или путем назначения ролей. Для отзыва привилегий у пользователя в ClickHouse предусмотрен запрос REVOKE. Чтобы вывести список привилегий пользователя, используйте оператор SHOW GRANTS.
Запросы управления:
Применение настроек
Настройки могут быть заданы по-разному: для учетной записи пользователя, в назначенных ей ролях и в профилях настроек. При входе пользователя, если одна и та же настройка задана для разных объектов управления доступом, ее значение и ограничения применяются в следующем порядке (от более высокого приоритета к более низкому):
- Настройки учетной записи пользователя.
- Настройки для ролей по умолчанию учетной записи пользователя. Если настройка задана в нескольких ролях, порядок ее применения не определен.
- Настройки из профилей настроек, назначенных пользователю или его ролям по умолчанию. Если настройка задана в нескольких профилях, порядок ее применения не определен.
- Настройки, применяемые ко всему серверу по умолчанию или из профиля по умолчанию.
Роль
Роль — это контейнер для объектов управления доступом, который может быть назначен учетной записи пользователя.
Роль содержит:
- Привилегии
- Настройки и ограничения
- Список назначенных ролей
Запросы управления:
Привилегии могут быть выданы роли с помощью запроса GRANT. Для отзыва привилегий у роли в ClickHouse предусмотрен запрос REVOKE.
Политика строк
Политика строк — это фильтр, который определяет, какие строки доступны пользователю или роли. Политика строк содержит фильтры для одной конкретной таблицы, а также список ролей и/или пользователей, к которым применяется эта политика строк.
Политики строк имеют смысл только для пользователей с доступом readonly. Если пользователи могут изменять таблицу или копировать партиции между таблицами, это сводит на нет ограничения политик строк.
Запросы управления:
Профиль настроек
Профиль настроек — это набор настроек. Профиль настроек содержит параметры и ограничения, а также список ролей и/или пользователей, к которым применяется этот профиль.
Запросы управления:
- CREATE SETTINGS PROFILE
- ALTER SETTINGS PROFILE
- DROP SETTINGS PROFILE
- SHOW CREATE SETTINGS PROFILE
- SHOW PROFILES
Квота
Квота ограничивает использование ресурсов. См. Quotas.
Квота содержит набор ограничений для некоторых интервалов времени, а также список ролей и/или пользователей, к которым применяется эта квота.
Запросы управления:
Включение управления доступом и учетными записями на основе 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, см. раздел Управление доступом в Cloud.
В этой статье рассматриваются основы определения SQL-пользователей и ролей, а также применения соответствующих прав и разрешений к базам данных, таблицам, строкам и столбцам.
Включение режима SQL-пользователей
-
Включите режим SQL-пользователей в файле
users.xmlдля пользователя<default>:ПримечаниеПользователь
default— единственный пользователь, который создаётся при новой установке, и по умолчанию он также используется для межузлового взаимодействия.В продуктивной среде рекомендуется отключить этого пользователя после того, как межузловое взаимодействие будет настроено с использованием SQL-администратора, а для межузловых коммуникаций будут заданы
<secret>, учётные данные кластера и/или учётные данные межузловых HTTP- и транспортных протоколов, поскольку учётная записьdefaultиспользуется для межузлового взаимодействия. -
Перезапустите узлы, чтобы применить изменения.
-
Запустите клиент ClickHouse:
Определение пользователей
- Создайте учётную запись SQL-администратора:
- Предоставьте новому пользователю полные административные права:
Изменение прав доступа
Эта статья предназначена для того, чтобы помочь вам лучше понять, как определять права доступа и как они работают при использовании операторов ALTER для привилегированных пользователей.
Операторы ALTER разделены на несколько категорий, некоторые из них образуют иерархию, а некоторые — нет и должны быть заданы явно.
Пример конфигурации БД, таблицы и пользователя
- Под учетной записью администратора создайте тестового пользователя
- Создайте тестовую базу данных
- Создайте демонстрационную таблицу
- Создайте тестового пользователя-администратора для выдачи и отзыва привилегий
Чтобы предоставить или отозвать права, пользователь с правами администратора должен иметь привилегию WITH GRANT OPTION.
Например:
Чтобы выполнить GRANT или REVOKE привилегий, пользователь должен сначала сам обладать этими привилегиями.
Предоставление или отзыв привилегий
Иерархия ALTER:
- Предоставление привилегий
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, каждую из них можно выдать отдельно; если у этой привилегии есть подпривилегии, они также будут автоматически выданы.
Например:
Права доступа будут настроены следующим образом:
Это также предоставляет следующие подпривилегии:
- Отзыв привилегий
ALTERу пользователей и ролей
Оператор REVOKE работает аналогично оператору GRANT.
Если пользователю/роли была предоставлена подпривилегия, вы можете либо отозвать эту подпривилегию напрямую, либо отозвать привилегию более высокого уровня, от которой она наследуется.
Например, если пользователю была предоставлена привилегия ALTER ADD COLUMN
Привилегию можно отозвать по отдельности:
Или их можно отозвать на любом из вышестоящих уровней (отозвать все подпривилегии на уровне COLUMN):
Дополнительно
Привилегии должны быть выданы пользователем, который не только имеет WITH GRANT OPTION, но и обладает самими этими привилегиями.
- Чтобы выдать администратору привилегию и также предоставить ему возможность управлять набором привилегий
Ниже приведён пример:
Теперь пользователь может выдавать или отзывать привилегию ALTER COLUMN и все её подпривилегии.
Тестирование
- Добавьте привилегию
SELECT
- Добавьте пользователю право на добавление столбцов
- Войдите в систему под учетной записью пользователя с ограниченными правами
- Проверьте добавление столбца
┌─имя─────┬─тип────┬─тип_по_умолчанию─┬─выражение_по_умолчанию─┬─комментарий─┬─выражение_кодека─┬─выражение_TTL─┐ │ id │ UInt64 │ │ │ │ │ │ │ column1 │ String │ │ │ │ │ │ │ column2 │ String │ │ │ │ │ │ └─────────┴────────┴─────────────────────┴────────────────────────────┴─────────────┴──────────────────┴──────────────────┘
- Проверка привилегии
ALTER ADMINпутём выдачи соответствующих прав
- Войдите в систему под пользователем alter admin
- Предоставить подпривилегию
- Проверьте, что выдаваемая привилегия, которой у пользователя alter admin нет, не рассматривается как подпривилегия уже выданных этому администратору привилегий.
Краткое содержание
Привилегии ALTER имеют иерархическую структуру для операций ALTER над таблицами и представлениями, но не для других операторов ALTER. Права могут задаваться на детализированном уровне или в виде групп привилегий, а также аналогичным образом отзыватьcя. Пользователь, выдающий или отзывающий права, должен иметь WITH GRANT OPTION, чтобы назначать привилегии пользователям, включая себя как действующего пользователя, и при этом уже обладать соответствующей привилегией. Действующий пользователь не может отозвать собственные привилегии, если сам не обладает привилегией GRANT OPTION.