Создание пользователей и ролей в ClickHouse
ClickHouse поддерживает управление контролем доступа на основе подхода RBAC.
Сущности доступа ClickHouse:
Вы можете настраивать сущности доступа с помощью:
-
SQL-ориентированного рабочего процесса.
Вам нужно включить эту функциональность.
-
Файлов конфигурации сервера
users.xml
иconfig.xml
.
Мы рекомендуем использовать SQL-ориентированный рабочий процесс. Оба метода конфигурации работают одновременно, поэтому, если вы используете файлы конфигурации сервера для управления учетными записями и правами доступа, вы можете плавно перейти на SQL-ориентированный рабочий процесс.
Нельзя управлять одной и той же сущностью доступа с помощью обоих методов конфигурации одновременно.
Если вы хотите управлять пользователями консоли ClickHouse Cloud, пожалуйста, обратитесь к этой странице.
Чтобы увидеть всех пользователей, роли, профили и т.д. и все их права, используйте оператор SHOW ACCESS
.
Обзор
По умолчанию сервер ClickHouse предоставляет учетную запись пользователя default
, для которой не разрешено использование управления доступом и учетными записями на основе SQL, но она имеет все права и разрешения. Учетная запись пользователя 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.
Политика строк
Политика строк — это фильтр, который определяет, какие строки доступны пользователю или роли. Политика строк содержит фильтры для одной конкретной таблицы, а также список ролей и/или пользователей, которым следует использовать эту политику строк.
Политики строк имеют смысл только для пользователей с доступом только для чтения. Если пользователи могут изменять таблицу или копировать партиции между таблицами, это сводит на нет ограничения политик строк.
Запросы управления:
Профиль настроек
Профиль настроек — это коллекция настроек. Профиль настроек содержит настройки и ограничения, а также список ролей и/или пользователей, к которым применяется этот профиль.
Запросы управления:
- CREATE SETTINGS PROFILE
- ALTER SETTINGS PROFILE
- DROP SETTINGS PROFILE
- SHOW CREATE SETTINGS PROFILE
- SHOW PROFILES
Квота
Квота ограничивает использование ресурсов. См. Квоты.
Квота содержит набор ограничений на некоторые промежутки времени, а также список ролей и/или пользователей, которые должны использовать эту квоту.
Запросы управления:
Включение управления доступом и учетными записями на основе 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
- Включите режим пользователя 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
- Добавьте привилегию на добавление столбца для пользователя
- Войдите с ограниченной учетной записью
- Протестируйте добавление столбца
- Протестируйте удаление столбца
- Тестирование администратора изменения, предоставив разрешение
- Войдите с учетной записью администратора изменения
- Предоставьте подпривилегию
- Протестируйте предоставление привилегии, которую пользователь администратора изменения не имеет, поскольку она не является подпривилегией предоставленных прав для учетной записи администратора.
Итоги
Привилегии ALTER иерархичны для ALTER
с таблицами и представлениями, но не для других операторов ALTER
. Привилегии могут быть установлены на детальном уровне или группировками, а также отозваны аналогично. Пользователь, предоставляющий или отзывающий привилегии, должен иметь WITH GRANT OPTION
, чтобы устанавливать привилегии для пользователей, включая самих действующих пользователей, и должен уже иметь эту привилегию. Действующий пользователь не может отозвать свои собственные привилегии, если у него нет привилегии на предоставление.