GRANT
- Присваивает привилегии пользователям или ролям ClickHouse.
- Назначает роли пользователям или другим ролям.
Отозвать привилегию можно с помощью выражения REVOKE. Чтобы вывести список присвоенных привилегий, воспользуйтесь выражением SHOW GRANTS.
Синтаксис присвоения привилегий
privilege— Тип привилегииrole— Роль пользователя ClickHouse.user— Пользователь ClickHouse.
WITH GRANT OPTION разрешает пользователю или роли выполнять запрос GRANT. Пользователь может выдавать только те привилегии, которые есть у него, той же или меньшей области действий.
WITH REPLACE OPTION заменяет все старые привилегии новыми привилегиями для user или role, если не указано, добавляет новые привилегии.
Синтаксис назначения ролей
role— Роль пользователя ClickHouse.user— Пользователь ClickHouse.
WITH ADMIN OPTION присваивает привилегию ADMIN OPTION пользователю или роли.
WITH REPLACE OPTION заменяет все старые роли новыми ролями для пользователя user или role, если не указано, добавляет новые новые роли.
Синтаксис присвоения текущих привилегий
privilege— Тип привилегииrole— Роль пользователя ClickHouse.user— Пользователь ClickHouse.
Использование выражения CURRENT GRANTS позволяет присвоить все указанные и доступные для присвоения привилегии.
Если список привелегий не задан, то указанный пользователь или роль получат все доступные привилегии для CURRENT_USER.
Использование
Для использования GRANT пользователь должен иметь привилегию GRANT OPTION. Пользователь может выдавать привилегии только внутри области действий назначенных ему самому привилегий.
Например, администратор выдал привилегию пользователю john:
Это означает, что пользователю john разрешено выполнять:
SELECT x,y FROM db.table.SELECT x FROM db.table.SELECT y FROM db.table.
john не может выполнить SELECT z FROM db.table или SELECT * FROM db.table. После обработки данных запросов ClickHouse ничего не вернет — даже x или y. Единственное исключение — если таблица содержит только столбцы x и y. В таком случае ClickHouse вернет все данные.
Также у john есть привилегия GRANT OPTION. john может выдать другим пользователям привилегии той же или меньшей области действий из тех, которые есть у него.
При присвоении привилегий допускается использовать астериск (*) вместо имени таблицы или базы данных. Например, запрос GRANT SELECT ON db.* TO john позволит пользователю john выполнять SELECT над всеми таблицам в базе данных db. Также вы можете опускать имя базы данных. В таком случае привилегии позволят совершать операции над текущей базой данных. Например, запрос GRANT SELECT ON * TO john выдаст привилегию на выполнение SELECT над всеми таблицами в текущей базе данных; GRANT SELECT ON mytable TO john — только над таблицей mytable в текущей базе данных.
Доступ к базе данных system разрешен всегда (данная база данных используется при обработке запросов).
Вы можете присвоить несколько привилегий нескольким пользователям в одном запросе. Запрос GRANT SELECT, INSERT ON *.* TO john, robin позволит пользователям john и robin выполнять INSERT и SELECT над всеми таблицами всех баз данных на сервере.
Привилегии
Привилегия — это разрешение на выполнение определенного типа запросов.
Привилегии имеют иерархическую структуру. Набор разрешенных запросов зависит от области действия привилегии.
Иерархия привилегий:
- SELECT
- INSERT
- ALTER
ALTER TABLEALTER UPDATEALTER DELETEALTER COLUMNALTER ADD COLUMNALTER DROP COLUMNALTER MODIFY COLUMNALTER COMMENT COLUMNALTER CLEAR COLUMNALTER RENAME COLUMN
ALTER INDEXALTER ORDER BYALTER SAMPLE BYALTER ADD INDEXALTER DROP INDEXALTER MATERIALIZE INDEXALTER CLEAR INDEX
ALTER CONSTRAINTALTER ADD CONSTRAINTALTER DROP CONSTRAINT
ALTER TTLALTER MATERIALIZE TTL
ALTER SETTINGSALTER MOVE PARTITIONALTER FETCH PARTITIONALTER FREEZE PARTITION
ALTER VIEWALTER VIEW REFRESHALTER VIEW MODIFY QUERY
- CREATE
CREATE DATABASECREATE TABLECREATE ARBITRARY TEMPORARY TABLECREATE TEMPORARY TABLE
CREATE VIEWCREATE DICTIONARYCREATE FUNCTION
- DROP
DROP DATABASEDROP TABLEDROP VIEWDROP DICTIONARYDROP FUNCTION
- TRUNCATE
- OPTIMIZE
- SHOW
SHOW DATABASESSHOW TABLESSHOW COLUMNSSHOW DICTIONARIES
- KILL QUERY
- ACCESS MANAGEMENT
CREATE USERALTER USERDROP USERCREATE ROLEALTER ROLEDROP ROLECREATE ROW POLICYALTER ROW POLICYDROP ROW POLICYCREATE QUOTAALTER QUOTADROP QUOTACREATE SETTINGS PROFILEALTER SETTINGS PROFILEDROP SETTINGS PROFILESHOW ACCESSSHOW_USERSSHOW_ROLESSHOW_ROW_POLICIESSHOW_QUOTASSHOW_SETTINGS_PROFILES
ROLE ADMIN
- SYSTEM
SYSTEM SHUTDOWNSYSTEM DROP CACHESYSTEM DROP DNS CACHESYSTEM DROP MARK CACHESYSTEM DROP UNCOMPRESSED CACHE
SYSTEM RELOADSYSTEM RELOAD CONFIGSYSTEM RELOAD DICTIONARYSYSTEM RELOAD EMBEDDED DICTIONARIES
SYSTEM RELOAD FUNCTIONSYSTEM RELOAD FUNCTIONS
SYSTEM MERGESSYSTEM TTL MERGESSYSTEM FETCHESSYSTEM MOVESSYSTEM SENDSSYSTEM DISTRIBUTED SENDSSYSTEM REPLICATED SENDS
SYSTEM REPLICATION QUEUESSYSTEM SYNC REPLICASYSTEM RESTART REPLICASYSTEM FLUSHSYSTEM FLUSH DISTRIBUTEDSYSTEM FLUSH LOGS
- INTROSPECTION
addressToLineaddressToSymboldemangle
- SOURCES
AZUREFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURL
- dictGet
Примеры того, как трактуется данная иерархия:
- Привилегия
ALTERвключает все остальныеALTER*привилегии. ALTER CONSTRAINTвключаетALTER ADD CONSTRAINTиALTER DROP CONSTRAINT.
Привилегии применяются на разных уровнях. Уровень определяет синтаксис присваивания привилегии.
Уровни (от низшего к высшему):
COLUMN— Привилегия присваивается для столбца, таблицы, базы данных или глобально.TABLE— Привилегия присваивается для таблицы, базы данных или глобально.VIEW— Привилегия присваивается для представления, базы данных или глобально.DICTIONARY— Привилегия присваивается для словаря, базы данных или глобально.DATABASE— Привилегия присваивается для базы данных или глобально.GLOBAL— Привилегия присваивается только глобально.GROUP— Группирует привилегии разных уровней. При присвоении привилегии уровняGROUPприсваиваются только привилегии из группы в соответствии с используемым синтаксисом.
Примеры допустимого синтаксиса:
GRANT SELECT(x) ON db.table TO userGRANT SELECT ON db.* TO user
Примеры недопустимого синтаксиса:
GRANT CREATE USER(x) ON db.table TO userGRANT CREATE USER ON db.* TO user
Специальная привилегия ALL присваивает все привилегии пользователю или роли.
По умолчанию пользователь или роль не имеют привилегий.
Отсутствие привилегий у пользователя или роли отображается как привилегия NONE.
Выполнение некоторых запросов требует определенного набора привилегий. Например, чтобы выполнить запрос RENAME, нужны следующие привилегии: SELECT, CREATE TABLE, INSERT и DROP TABLE.
SELECT
Разрешает выполнять запросы SELECT.
Уровень: COLUMN.
Описание
Пользователь с данной привилегией может выполнять запросы SELECT над определенными столбцами из определенной таблицы и базы данных. При включении в запрос других столбцов запрос ничего не вернет.
Рассмотрим следующую привилегию:
Данная привилегия позволяет пользователю john выполнять выборку данных из столбцов x и/или y в db.table, например, SELECT x FROM db.table. john не может выполнить SELECT z FROM db.table или SELECT * FROM db.table. После обработки данных запросов ClickHouse ничего не вернет — даже x или y. Единственное исключение — если таблица содержит только столбцы x и y. В таком случае ClickHouse вернет все данные.
INSERT
Разрешает выполнять запросы INSERT.
Уровень: COLUMN.
Описание
Пользователь с данной привилегией может выполнять запросы INSERT над определенными столбцами из определенной таблицы и базы данных. При включении в запрос других столбцов запрос не добавит никаких данных.
Пример
Присвоенная привилегия позволит пользователю john вставить данные в столбцы x и/или y в db.table.
ALTER
Разрешает выполнять запросы ALTER в соответствии со следующей иерархией привилегий:
ALTER. Уровень:COLUMN.ALTER TABLE. Уровень:GROUPALTER UPDATE. Уровень:COLUMN. Алиасы:UPDATEALTER DELETE. Уровень:COLUMN. Алиасы:DELETEALTER COLUMN. Уровень:GROUPALTER ADD COLUMN. Уровень:COLUMN. Алиасы:ADD COLUMNALTER DROP COLUMN. Уровень:COLUMN. Алиасы:DROP COLUMNALTER MODIFY COLUMN. Уровень:COLUMN. Алиасы:MODIFY COLUMNALTER COMMENT COLUMN. Уровень:COLUMN. Алиасы:COMMENT COLUMNALTER CLEAR COLUMN. Уровень:COLUMN. Алиасы:CLEAR COLUMNALTER RENAME COLUMN. Уровень:COLUMN. Алиасы:RENAME COLUMN
ALTER INDEX. Уровень:GROUP. Алиасы:INDEXALTER ORDER BY. Уровень:TABLE. Алиасы:ALTER MODIFY ORDER BY,MODIFY ORDER BYALTER SAMPLE BY. Уровень:TABLE. Алиасы:ALTER MODIFY SAMPLE BY,MODIFY SAMPLE BYALTER ADD INDEX. Уровень:TABLE. Алиасы:ADD INDEXALTER DROP INDEX. Уровень:TABLE. Алиасы:DROP INDEXALTER MATERIALIZE INDEX. Уровень:TABLE. Алиасы:MATERIALIZE INDEXALTER CLEAR INDEX. Уровень:TABLE. Алиасы:CLEAR INDEX
ALTER CONSTRAINT. Уровень:GROUP. Алиасы:CONSTRAINTALTER ADD CONSTRAINT. Уровень:TABLE. Алиасы:ADD CONSTRAINTALTER DROP CONSTRAINT. Уровень:TABLE. Алиасы:DROP CONSTRAINT
ALTER TTL. Уровень:TABLE. Алиасы:ALTER MODIFY TTL,MODIFY TTLALTER MATERIALIZE TTL. Уровень:TABLE. Алиасы:MATERIALIZE TTL
ALTER SETTINGS. Уровень:TABLE. Алиасы:ALTER SETTING,ALTER MODIFY SETTING,MODIFY SETTINGALTER MOVE PARTITION. Уровень:TABLE. Алиасы:ALTER MOVE PART,MOVE PARTITION,MOVE PARTALTER FETCH PARTITION. Уровень:TABLE. Алиасы:ALTER FETCH PART,FETCH PARTITION,FETCH PARTALTER FREEZE PARTITION. Уровень:TABLE. Алиасы:FREEZE PARTITION
ALTER VIEWУровень:GROUPALTER VIEW REFRESH. Уровень:VIEW. Алиасы:ALTER LIVE VIEW REFRESH,REFRESH VIEWALTER VIEW MODIFY QUERY. Уровень:VIEW. Алиасы:ALTER TABLE MODIFY QUERY
Примеры того, как трактуется данная иерархия:
- Привилегия
ALTERвключает все остальныеALTER*привилегии. ALTER CONSTRAINTвключаетALTER ADD CONSTRAINTиALTER DROP CONSTRAINT.
Дополнительно
- Привилегия
MODIFY SETTINGпозволяет изменять настройки движков таблиц. Не влияет на настройки или конфигурационные параметры сервера. - Операция
ATTACHтребует наличие привилегии CREATE. - Операция
DETACHтребует наличие привилегии DROP. - Для остановки мутации с помощью KILL MUTATION, необходима привилегия на выполнение данной мутации. Например, чтобы остановить запрос
ALTER UPDATE, необходима одна из привилегий:ALTER UPDATE,ALTER TABLEилиALTER.
CREATE
Разрешает выполнять DDL-запросы CREATE и ATTACH в соответствии со следующей иерархией привилегий:
CREATE. Уровень:GROUPCREATE DATABASE. Уровень:DATABASECREATE TABLE. Уровень:TABLECREATE ARBITRARY TEMPORARY TABLE. Уровень:GLOBALCREATE TEMPORARY TABLE. Уровень:GLOBAL
CREATE VIEW. Уровень:VIEWCREATE DICTIONARY. Уровень:DICTIONARY
Дополнительно
- Для удаления созданной таблицы пользователю необходима привилегия DROP.
DROP
Разрешает выполнять запросы DROP и DETACH в соответствии со следующей иерархией привилегий:
DROP. Уровень:GROUPDROP DATABASE. Уровень:DATABASEDROP TABLE. Уровень:TABLEDROP VIEW. Уровень:VIEWDROP DICTIONARY. Уровень:DICTIONARY
TRUNCATE
Разрешает выполнять запросы TRUNCATE.
Уровень: TABLE.
OPTIMIZE
Разрешает выполнять запросы OPTIMIZE TABLE.
Уровень: TABLE.
SHOW
Разрешает выполнять запросы SHOW, DESCRIBE, USE и EXISTS в соответствии со следующей иерархией привилегий:
SHOW. Уровень:GROUPSHOW DATABASES. Уровень:DATABASE. Разрешает выполнять запросыSHOW DATABASES,SHOW CREATE DATABASE,USE <database>.SHOW TABLES. Уровень:TABLE. Разрешает выполнять запросыSHOW TABLES,EXISTS <table>,CHECK <table>.SHOW COLUMNS. Уровень:COLUMN. Разрешает выполнять запросыSHOW CREATE TABLE,DESCRIBE.SHOW DICTIONARIES. Уровень:DICTIONARY. Разрешает выполнять запросыSHOW DICTIONARIES,SHOW CREATE DICTIONARY,EXISTS <dictionary>.
Дополнительно
У пользователя есть привилегия SHOW, если ему присвоена любая другая привилегия по отношению к определенной таблице, словарю или базе данных.
KILL QUERY
Разрешает выполнять запросы KILL в соответствии со следующей иерархией привилегий:
Уровень: GLOBAL.
Дополнительно
KILL QUERY позволяет пользователю останавливать запросы других пользователей.
ACCESS MANAGEMENT
Разрешает пользователю выполнять запросы на управление пользователями, ролями и политиками доступа к строкам.
ACCESS MANAGEMENT. Уровень:GROUPCREATE USER. Уровень:GLOBALALTER USER. Уровень:GLOBALDROP USER. Уровень:GLOBALCREATE ROLE. Уровень:GLOBALALTER ROLE. Уровень:GLOBALDROP ROLE. Уровень:GLOBALROLE ADMIN. Уровень:GLOBALCREATE ROW POLICY. Уровень:GLOBAL. Алиасы:CREATE POLICYALTER ROW POLICY. Уровень:GLOBAL. Алиасы:ALTER POLICYDROP ROW POLICY. Уровень:GLOBAL. Алиасы:DROP POLICYCREATE QUOTA. Уровень:GLOBALALTER QUOTA. Уровень:GLOBALDROP QUOTA. Уровень:GLOBALCREATE SETTINGS PROFILE. Уровень:GLOBAL. Алиасы:CREATE PROFILEALTER SETTINGS PROFILE. Уровень:GLOBAL. Алиасы:ALTER PROFILEDROP SETTINGS PROFILE. Уровень:GLOBAL. Алиасы:DROP PROFILESHOW ACCESS. Уровень:GROUPSHOW_USERS. Уровень:GLOBAL. Алиасы:SHOW CREATE USERSHOW_ROLES. Уровень:GLOBAL. Алиасы:SHOW CREATE ROLESHOW_ROW_POLICIES. Уровень:GLOBAL. Алиасы:SHOW POLICIES,SHOW CREATE ROW POLICY,SHOW CREATE POLICYSHOW_QUOTAS. Уровень:GLOBAL. Алиасы:SHOW CREATE QUOTASHOW_SETTINGS_PROFILES. Уровень:GLOBAL. Алиасы:SHOW PROFILES,SHOW CREATE SETTINGS PROFILE,SHOW CREATE PROFILE
Привилегия ROLE ADMIN разрешает пользователю назначать и отзывать любые роли, включая те, которые не назначены пользователю с опцией администратора.
SYSTEM
Разрешает выполнять запросы SYSTEM в соответствии со следующей иерархией привилегий:
SYSTEM. Уровень:GROUPSYSTEM SHUTDOWN. Уровень:GLOBAL. Алиасы:SYSTEM KILL,SHUTDOWNSYSTEM DROP CACHE. Алиасы:DROP CACHESYSTEM DROP DNS CACHE. Уровень:GLOBAL. Алиасы:SYSTEM DROP DNS,DROP DNS CACHE,DROP DNSSYSTEM DROP MARK CACHE. Уровень:GLOBAL. Алиасы:SYSTEM DROP MARK,DROP MARK CACHE,DROP MARKSSYSTEM DROP UNCOMPRESSED CACHE. Уровень:GLOBAL. Алиасы:SYSTEM DROP UNCOMPRESSED,DROP UNCOMPRESSED CACHE,DROP UNCOMPRESSED
SYSTEM RELOAD. Уровень:GROUPSYSTEM RELOAD CONFIG. Уровень:GLOBAL. Алиасы:RELOAD CONFIGSYSTEM RELOAD DICTIONARY. Уровень:GLOBAL. Алиасы:SYSTEM RELOAD DICTIONARIES,RELOAD DICTIONARY,RELOAD DICTIONARIESSYSTEM RELOAD EMBEDDED DICTIONARIES. Уровень:GLOBAL. Алиасы:RELOAD EMBEDDED DICTIONARIES
SYSTEM MERGES. Уровень:TABLE. Алиасы:SYSTEM STOP MERGES,SYSTEM START MERGES,STOP MERGES,START MERGESSYSTEM TTL MERGES. Уровень:TABLE. Алиасы:SYSTEM STOP TTL MERGES,SYSTEM START TTL MERGES,STOP TTL MERGES,START TTL MERGESSYSTEM FETCHES. Уровень:TABLE. Алиасы:SYSTEM STOP FETCHES,SYSTEM START FETCHES,STOP FETCHES,START FETCHESSYSTEM MOVES. Уровень:TABLE. Алиасы:SYSTEM STOP MOVES,SYSTEM START MOVES,STOP MOVES,START MOVESSYSTEM SENDS. Уровень:GROUP. Алиасы:SYSTEM STOP SENDS,SYSTEM START SENDS,STOP SENDS,START SENDSSYSTEM DISTRIBUTED SENDS. Уровень:TABLE. Алиасы:SYSTEM STOP DISTRIBUTED SENDS,SYSTEM START DISTRIBUTED SENDS,STOP DISTRIBUTED SENDS,START DISTRIBUTED SENDSSYSTEM REPLICATED SENDS. Уровень:TABLE. Алиасы:SYSTEM STOP REPLICATED SENDS,SYSTEM START REPLICATED SENDS,STOP REPLICATED SENDS,START REPLICATED SENDS
SYSTEM REPLICATION QUEUES. Уровень:TABLE. Алиасы:SYSTEM STOP REPLICATION QUEUES,SYSTEM START REPLICATION QUEUES,STOP REPLICATION QUEUES,START REPLICATION QUEUESSYSTEM SYNC REPLICA. Уровень:TABLE. Алиасы:SYNC REPLICASYSTEM RESTART REPLICA. Уровень:TABLE. Алиасы:RESTART REPLICASYSTEM FLUSH. Уровень:GROUPSYSTEM FLUSH DISTRIBUTED. Уровень:TABLE. Алиасы:FLUSH DISTRIBUTEDSYSTEM FLUSH LOGS. Уровень:GLOBAL. Алиасы:FLUSH LOGS
Привилегия SYSTEM RELOAD EMBEDDED DICTIONARIES имплицитно присваивается привилегией SYSTEM RELOAD DICTIONARY ON *.*.
INTROSPECTION
Разрешает использовать функции интроспекции.
INTROSPECTION. Уровень:GROUP. Алиасы:INTROSPECTION FUNCTIONSaddressToLine. Уровень:GLOBALaddressToSymbol. Уровень:GLOBALdemangle. Уровень:GLOBAL
SOURCES
Разрешает использовать внешние источники данных. Применяется к движкам таблиц и табличным функциям.
SOURCES. Уровень:GROUPAZURE. Уровень:GLOBALFILE. Уровень:GLOBALHDFS. Уровень:GLOBALHIVE. Уровень:GLOBALJDBC. Уровень:GLOBALKAFKA. Уровень:GLOBALMONGO. Уровень:GLOBALMYSQL. Уровень:GLOBALNATS. Уровень:GLOBALODBC. Уровень:GLOBALPOSTGRES. Уровень:GLOBALRABBITMQ. Уровень:GLOBALREDIS. Уровень:GLOBALREMOTE. Уровень:GLOBALS3. Уровень:GLOBALSQLITE. Уровень:GLOBALURL. Уровень:GLOBAL
Привилегия SOURCES разрешает использование всех источников. Также вы можете присвоить привилегию для каждого источника отдельно. Для использования источников необходимы дополнительные привилегии.
Примеры:
- Чтобы создать таблицу с движком MySQL, необходимы привилегии
CREATE TABLE (ON db.table_name)иMYSQL. - Чтобы использовать табличную функцию mysql, необходимы привилегии
CREATE TEMPORARY TABLEиMYSQL.
dictGet
dictGet. Алиасы:dictHas,dictGetHierarchy,dictIsIn
Разрешает вызывать функции dictGet, dictHas, dictGetHierarchy, dictIsIn.
Уровень: DICTIONARY.
Примеры
GRANT dictGet ON mydb.mydictionary TO johnGRANT dictGet ON mydictionary TO john
ALL
Присваивает пользователю или роли все привилегии на объект с регулируемым доступом.
NONE
Не присваивает никаких привилегий.
ADMIN OPTION
Привилегия ADMIN OPTION разрешает пользователю назначать свои роли другому пользователю.