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