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