Создание Пользователей и Ролей в ClickHouse
ClickHouse поддерживает управление контролем доступа на основе подхода RBAC.
Сущности доступа ClickHouse:
Вы можете настраивать сущности доступа с помощью:
-
Рабочего процесса на основе SQL.
Вы должны включить эту функциональность.
-
Файлов конфигурации сервера
users.xml
иconfig.xml
.
Мы рекомендуем использовать рабочий процесс на основе SQL. Оба метода конфигурации работают одновременно, поэтому, если вы используете файлы конфигурации сервера для управления учетными записями и правами доступа, вы можете плавно переключиться на рабочий процесс на основе SQL.
Вы не можете управлять одной и той же сущностью доступа обоими методами конфигурации одновременно.
Если вы ищете управление пользователями консоли ClickHouse Cloud, пожалуйста, обратитесь к этой странице.
Чтобы увидеть всех пользователей, роли, профили и т.д. и все их привилегии, используйте оператор SHOW ACCESS
.
Обзор
По умолчанию сервер ClickHouse предоставляет учетную запись пользователя default
, которой не разрешено использовать управление доступом и учетными записями на основе SQL, но она имеет все права и разрешения. Учетная запись пользователя default
используется в любых случаях, когда имя пользователя не указано, например, при входе от клиента или в распределенных запросах. В обработке распределённых запросов используется учетная запись пользователя по умолчанию, если в конфигурации сервера или кластера не указаны свойства пользователя и пароля.
Если вы только начали использовать 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
для привилегированных пользователей.
Операторы 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
, чтобы устанавливать привилегии пользователям, включая самих действующих пользователей, и должен уже иметь данную привилегию. Действующий пользователь не может отозвать свои собственные привилегии, если он не обладает привилегией возможности предоставления.