docs/en/sql-reference/statements/grant.md
import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge';
To revoke privileges, use the REVOKE statement. Also you can list granted privileges with the SHOW GRANTS statement.
GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table[*]|db[*].*|*.*|table[*]|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege — Type of privilege.role — ClickHouse user role.user — ClickHouse user account.The WITH GRANT OPTION clause grants user or role with permission to execute the GRANT query. Users can grant privileges of the same scope they have and less.
The WITH REPLACE OPTION clause replace old privileges by new privileges for the user or role, if is not specified it appends privileges.
GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION] [WITH REPLACE OPTION]
role — ClickHouse user role.user — ClickHouse user account.The WITH ADMIN OPTION clause grants ADMIN OPTION privilege to user or role.
The WITH REPLACE OPTION clause replace old roles by new role for the user or role, if is not specified it appends roles.
GRANT CURRENT GRANTS{(privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*}) | ON {db.table|db.*|*.*|table|*}} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege — Type of privilege.role — ClickHouse user role.user — ClickHouse user account.Using the CURRENT GRANTS statement allows you to give all specified privileges to the given user or role.
If none of the privileges were specified, then the given user or role will receive all available privileges for CURRENT_USER.
To use GRANT, your account must have the GRANT OPTION privilege. You can grant privileges only inside the scope of your account privileges.
For example, administrator has granted privileges to the john account by the query:
GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION
It means that john has the permission to execute:
SELECT x,y FROM db.table.SELECT x FROM db.table.SELECT y FROM db.table.john can't execute SELECT z FROM db.table. The SELECT * FROM db.table also is not available. Processing this query, ClickHouse does not return any data, even x and y. The only exception is if a table contains only x and y columns. In this case ClickHouse returns all the data.
Also john has the GRANT OPTION privilege, so it can grant other users with privileges of the same or smaller scope.
Access to the system database is always allowed (since this database is used for processing queries).
:::note
While there are many system tables which new users can access by default, they may not be able to access every system table by default without grants.
Additionally, access to certain system tables such as system.zookeeper is restricted for Cloud users for security reasons.
:::
You can grant multiple privileges to multiple accounts in one query. The query GRANT SELECT, INSERT ON *.* TO john, robin allows accounts john and robin to execute the INSERT and SELECT queries over all the tables in all the databases on the server.
Specifying privileges you can use asterisk (*) instead of a table or a database name. For example, the GRANT SELECT ON db.* TO john query allows john to execute the SELECT query over all the tables in db database.
Also, you can omit database name. In this case privileges are granted for current database.
For example, GRANT SELECT ON * TO john grants the privilege on all the tables in the current database, GRANT SELECT ON mytable TO john grants the privilege on the mytable table in the current database.
:::note The feature described below is available starting with the 24.10 ClickHouse version. :::
You can also put asterisks at the end of a table or a database name. This feature allows you to grant privileges on an abstract prefix of the table's path.
Example: GRANT SELECT ON db.my_tables* TO john. This query allows john to execute the SELECT query over all the db database tables with the prefix my_tables*.
More examples:
GRANT SELECT ON db.my_tables* TO john
SELECT * FROM db.my_tables -- granted
SELECT * FROM db.my_tables_0 -- granted
SELECT * FROM db.my_tables_1 -- granted
SELECT * FROM db.other_table -- not_granted
SELECT * FROM db2.my_tables -- not_granted
GRANT SELECT ON db*.* TO john
SELECT * FROM db.my_tables -- granted
SELECT * FROM db.my_tables_0 -- granted
SELECT * FROM db.my_tables_1 -- granted
SELECT * FROM db.other_table -- granted
SELECT * FROM db2.my_tables -- granted
All newly created tables within granted paths will automatically inherit all grants from their parents.
For example, if you run the GRANT SELECT ON db.* TO john query and then create a new table db.new_table, the user john will be able to run the SELECT * FROM db.new_table query.
You can specify asterisk only for the prefixes:
GRANT SELECT ON db.* TO john -- correct
GRANT SELECT ON db*.* TO john -- correct
GRANT SELECT ON *.my_table TO john -- wrong
GRANT SELECT ON foo*bar TO john -- wrong
GRANT SELECT ON *suffix TO john -- wrong
GRANT SELECT(foo) ON db.table* TO john -- wrong
A Privilege is a permission given to a user to execute specific kinds of queries.
Privileges have a hierarchical structure and a set of permitted queries depends on the privilege scope.
The hierarchy of privileges in ClickHouse is shown below:
ALL
ACCESS MANAGEMENT
ALLOW SQL SECURITY NONEALTER QUOTAALTER ROLEALTER ROW POLICYALTER SETTINGS PROFILEALTER USERCREATE QUOTACREATE ROLECREATE ROW POLICYCREATE SETTINGS PROFILECREATE USERDROP QUOTADROP ROLEDROP ROW POLICYDROP SETTINGS PROFILEDROP USERROLE ADMINSHOW ACCESS
SHOW QUOTASSHOW ROLESSHOW ROW POLICIESSHOW SETTINGS PROFILESSHOW USERSALTER
ALTER DATABASE
ALTER DATABASE SETTINGSALTER TABLE
ALTER COLUMN
ALTER ADD COLUMNALTER CLEAR COLUMNALTER COMMENT COLUMNALTER DROP COLUMNALTER MATERIALIZE COLUMNALTER MODIFY COLUMNALTER RENAME COLUMNALTER CONSTRAINT
ALTER ADD CONSTRAINTALTER DROP CONSTRAINTALTER DELETEALTER FETCH PARTITIONALTER FREEZE PARTITIONALTER INDEX
ALTER ADD INDEXALTER CLEAR INDEXALTER DROP INDEXALTER MATERIALIZE INDEXALTER ORDER BYALTER SAMPLE BYALTER MATERIALIZE TTLALTER MODIFY COMMENTALTER MOVE PARTITIONALTER PROJECTIONALTER SETTINGSALTER STATISTICS
ALTER ADD STATISTICSALTER DROP STATISTICSALTER MATERIALIZE STATISTICSALTER MODIFY STATISTICSALTER TTLALTER UPDATEALTER TABLE EXECUTEALTER VIEW
ALTER VIEW MODIFY QUERYALTER VIEW REFRESHALTER VIEW MODIFY SQL SECURITYBACKUPCLUSTERCREATE
CREATE ARBITRARY TEMPORARY TABLE
CREATE TEMPORARY TABLECREATE DATABASECREATE DICTIONARYCREATE FUNCTIONCREATE RESOURCECREATE TABLECREATE VIEWCREATE WORKLOADdictGetdisplaySecretsInShowAndSelectDROP
DROP DATABASEDROP DICTIONARYDROP FUNCTIONDROP RESOURCEDROP TABLEDROP VIEWDROP WORKLOADINSERTINTROSPECTION
addressToLineaddressToLineWithInlinesaddressToSymboldemangleKILL QUERYKILL TRANSACTIONMOVE PARTITION BETWEEN SHARDSNAMED COLLECTION ADMIN
ALTER NAMED COLLECTIONCREATE NAMED COLLECTIONDROP NAMED COLLECTIONNAMED COLLECTIONSHOW NAMED COLLECTIONSSHOW NAMED COLLECTIONS SECRETSOPTIMIZESELECTSET DEFINERSHOW
SHOW COLUMNSSHOW DATABASESSHOW DICTIONARIESSHOW TABLESSHOW FILESYSTEM CACHESSOURCES
AZUREFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURLSYSTEM
SYSTEM CLEANUPSYSTEM DROP CACHE
SYSTEM DROP COMPILED EXPRESSION CACHESYSTEM DROP CONNECTIONS CACHESYSTEM DROP DISTRIBUTED CACHESYSTEM DROP DNS CACHESYSTEM DROP FILESYSTEM CACHESYSTEM DROP FORMAT SCHEMA CACHESYSTEM DROP MARK CACHESYSTEM DROP MMAP CACHESYSTEM DROP PAGE CACHESYSTEM DROP PRIMARY INDEX CACHESYSTEM DROP QUERY CACHESYSTEM DROP S3 CLIENT CACHESYSTEM DROP SCHEMA CACHESYSTEM DROP UNCOMPRESSED CACHESYSTEM DROP PRIMARY INDEX CACHESYSTEM DROP REPLICASYSTEM FAILPOINTSYSTEM FETCHESSYSTEM FLUSH
SYSTEM FLUSH ASYNC INSERT QUEUESYSTEM FLUSH LOGSSYSTEM JEMALLOCSYSTEM KILL QUERYSYSTEM KILL TRANSACTIONSYSTEM LISTENSYSTEM LOAD PRIMARY KEYSYSTEM MERGESSYSTEM MOVESSYSTEM PULLING REPLICATION LOGSYSTEM REDUCE BLOCKING PARTSSYSTEM REPLICATION QUEUESSYSTEM REPLICA READINESSSYSTEM RESTART DISKSYSTEM RESTART REPLICASYSTEM RESTORE REPLICASYSTEM RELOAD
SYSTEM RELOAD ASYNCHRONOUS METRICSSYSTEM RELOAD CONFIG
SYSTEM RELOAD DICTIONARYSYSTEM RELOAD EMBEDDED DICTIONARIESSYSTEM RELOAD FUNCTIONSYSTEM RELOAD MODELSYSTEM RELOAD USERSSYSTEM SENDS
SYSTEM DISTRIBUTED SENDSSYSTEM REPLICATED SENDSSYSTEM SHUTDOWNSYSTEM SYNC DATABASE REPLICASYSTEM SYNC FILE CACHESYSTEM SYNC FILESYSTEM CACHESYSTEM SYNC REPLICASYSTEM SYNC TRANSACTION LOGSYSTEM THREAD FUZZERSYSTEM TTL MERGESSYSTEM UNFREEZESYSTEM UNLOAD PRIMARY KEYSYSTEM VIEWSSYSTEM VIRTUAL PARTS UPDATESYSTEM WAIT LOADING PARTSTABLE ENGINETRUNCATEUNDROP TABLENONEExamples of how this hierarchy is treated:
ALTER privilege includes all other ALTER* privileges.ALTER CONSTRAINT includes ALTER ADD CONSTRAINT and ALTER DROP CONSTRAINT privileges.Privileges are applied at different levels. Knowing of a level suggests syntax available for privilege.
Levels (from lower to higher):
COLUMN — Privilege can be granted for column, table, database, or globally.TABLE — Privilege can be granted for table, database, or globally.VIEW — Privilege can be granted for view, database, or globally.DICTIONARY — Privilege can be granted for dictionary, database, or globally.DATABASE — Privilege can be granted for database or globally.GLOBAL — Privilege can be granted only globally.GROUP — Groups privileges of different levels. When GROUP-level privilege is granted, only that privileges from the group are granted which correspond to the used syntax.Examples of allowed syntax:
GRANT SELECT(x) ON db.table TO userGRANT SELECT ON db.* TO userExamples of disallowed syntax:
GRANT CREATE USER(x) ON db.table TO userGRANT CREATE USER ON db.* TO userThe special privilege ALL grants all the privileges to a user account or a role.
By default, a user account or a role has no privileges.
If a user or a role has no privileges, it is displayed as NONE privilege.
Some queries by their implementation require a set of privileges. For example, to execute the RENAME query you need the following privileges: SELECT, CREATE TABLE, INSERT and DROP TABLE.
Allows executing SELECT queries.
Privilege level: COLUMN.
Description
User granted with this privilege can execute SELECT queries over a specified list of columns in the specified table and database. If user includes other columns then specified a query returns no data.
Consider the following privilege:
GRANT SELECT(x,y) ON db.table TO john
This privilege allows john to execute any SELECT query that involves data from the x and/or y columns in db.table, for example, SELECT x FROM db.table. john can't execute SELECT z FROM db.table. The SELECT * FROM db.table also is not available. Processing this query, ClickHouse does not return any data, even x and y. The only exception is if a table contains only x and y columns, in this case ClickHouse returns all the data.
Allows executing INSERT queries.
Privilege level: COLUMN.
Description
User granted with this privilege can execute INSERT queries over a specified list of columns in the specified table and database. If user includes other columns then specified a query does not insert any data.
Example
GRANT INSERT(x,y) ON db.table TO john
The granted privilege allows john to insert data to the x and/or y columns in db.table.
Allows executing ALTER queries according to the following hierarchy of privileges:
ALTER. Level: COLUMN.
ALTER TABLE. Level: GROUPALTER UPDATE. Level: COLUMN. Aliases: UPDATEALTER DELETE. Level: COLUMN. Aliases: DELETEALTER COLUMN. Level: GROUPALTER ADD COLUMN. Level: COLUMN. Aliases: ADD COLUMNALTER DROP COLUMN. Level: COLUMN. Aliases: DROP COLUMNALTER MODIFY COLUMN. Level: COLUMN. Aliases: MODIFY COLUMNALTER COMMENT COLUMN. Level: COLUMN. Aliases: COMMENT COLUMNALTER CLEAR COLUMN. Level: COLUMN. Aliases: CLEAR COLUMNALTER RENAME COLUMN. Level: COLUMN. Aliases: RENAME COLUMNALTER INDEX. Level: GROUP. Aliases: INDEXALTER ORDER BY. Level: TABLE. Aliases: ALTER MODIFY ORDER BY, MODIFY ORDER BYALTER SAMPLE BY. Level: TABLE. Aliases: ALTER MODIFY SAMPLE BY, MODIFY SAMPLE BYALTER ADD INDEX. Level: TABLE. Aliases: ADD INDEXALTER DROP INDEX. Level: TABLE. Aliases: DROP INDEXALTER MATERIALIZE INDEX. Level: TABLE. Aliases: MATERIALIZE INDEXALTER CLEAR INDEX. Level: TABLE. Aliases: CLEAR INDEXALTER CONSTRAINT. Level: GROUP. Aliases: CONSTRAINTALTER ADD CONSTRAINT. Level: TABLE. Aliases: ADD CONSTRAINTALTER DROP CONSTRAINT. Level: TABLE. Aliases: DROP CONSTRAINTALTER TTL. Level: TABLE. Aliases: ALTER MODIFY TTL, MODIFY TTLALTER MATERIALIZE TTL. Level: TABLE. Aliases: MATERIALIZE TTLALTER SETTINGS. Level: TABLE. Aliases: ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTINGALTER MOVE PARTITION. Level: TABLE. Aliases: ALTER MOVE PART, MOVE PARTITION, MOVE PARTALTER FETCH PARTITION. Level: TABLE. Aliases: ALTER FETCH PART, FETCH PARTITION, FETCH PARTALTER FREEZE PARTITION. Level: TABLE. Aliases: FREEZE PARTITIONALTER EXECUTE. Level: TABLE. Aliases: ALTER TABLE EXECUTEALTER VIEW. Level: GROUPALTER VIEW REFRESH. Level: VIEW. Aliases: REFRESH VIEWALTER VIEW MODIFY QUERY. Level: VIEW. Aliases: ALTER TABLE MODIFY QUERYALTER VIEW MODIFY SQL SECURITY. Level: VIEW. Aliases: ALTER TABLE MODIFY SQL SECURITYExamples of how this hierarchy is treated:
ALTER privilege includes all other ALTER* privileges.ALTER CONSTRAINT includes ALTER ADD CONSTRAINT and ALTER DROP CONSTRAINT privileges.Notes
MODIFY SETTING privilege allows modifying table engine settings. It does not affect settings or server configuration parameters.ATTACH operation needs the CREATE privilege.DETACH operation needs the DROP privilege.ALTER UPDATE query, you need the ALTER UPDATE, ALTER TABLE, or ALTER privilege.Allows execution of [BACKUP] in queries. For more information on backups see "Backup and Restore".
Allows executing CREATE and ATTACH DDL-queries according to the following hierarchy of privileges:
CREATE. Level: GROUP
CREATE DATABASE. Level: DATABASECREATE TABLE. Level: TABLE
CREATE ARBITRARY TEMPORARY TABLE. Level: GLOBAL
CREATE TEMPORARY TABLE. Level: GLOBALCREATE VIEW. Level: VIEWCREATE DICTIONARY. Level: DICTIONARYNotes
Allows executing ON CLUSTER queries.
GRANT CLUSTER ON *.* TO <username>
By default, queries with ON CLUSTER require the user to have the CLUSTER grant.
You will get the following error if you to try to use ON CLUSTER in a query without first granting the CLUSTER privilege:
Not enough privileges. To execute this query, it's necessary to have the grant CLUSTER ON *.*.
The default behavior can be changed by setting the on_cluster_queries_require_cluster_grant setting,
located in the access_control_improvements section of config.xml (see below), to false.
<access_control_improvements>
<on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
</access_control_improvements>
Allows executing DROP and DETACH queries according to the following hierarchy of privileges:
DROP. Level: GROUP
DROP DATABASE. Level: DATABASEDROP TABLE. Level: TABLEDROP VIEW. Level: VIEWDROP DICTIONARY. Level: DICTIONARYAllows executing TRUNCATE queries.
Privilege level: TABLE.
Allows executing OPTIMIZE TABLE queries.
Privilege level: TABLE.
Allows executing SHOW, DESCRIBE, USE, and EXISTS queries according to the following hierarchy of privileges:
SHOW. Level: GROUP
SHOW DATABASES. Level: DATABASE. Allows to execute SHOW DATABASES, SHOW CREATE DATABASE, USE <database> queries.SHOW TABLES. Level: TABLE. Allows to execute SHOW TABLES, EXISTS <table>, CHECK <table> queries.SHOW COLUMNS. Level: COLUMN. Allows to execute SHOW CREATE TABLE, DESCRIBE queries.SHOW DICTIONARIES. Level: DICTIONARY. Allows to execute SHOW DICTIONARIES, SHOW CREATE DICTIONARY, EXISTS <dictionary> queries.Notes
A user has the SHOW privilege if it has any other privilege concerning the specified table, dictionary or database.
Allows executing KILL queries according to the following hierarchy of privileges:
Privilege level: GLOBAL.
Notes
KILL QUERY privilege allows one user to kill queries of other users.
Allows a user to execute queries that manage users, roles and row policies.
ACCESS MANAGEMENT. Level: GROUP
CREATE USER. Level: GLOBALALTER USER. Level: GLOBALDROP USER. Level: GLOBALCREATE ROLE. Level: GLOBALALTER ROLE. Level: GLOBALDROP ROLE. Level: GLOBALROLE ADMIN. Level: GLOBALCREATE ROW POLICY. Level: GLOBAL. Aliases: CREATE POLICYALTER ROW POLICY. Level: GLOBAL. Aliases: ALTER POLICYDROP ROW POLICY. Level: GLOBAL. Aliases: DROP POLICYCREATE QUOTA. Level: GLOBALALTER QUOTA. Level: GLOBALDROP QUOTA. Level: GLOBALCREATE SETTINGS PROFILE. Level: GLOBAL. Aliases: CREATE PROFILEALTER SETTINGS PROFILE. Level: GLOBAL. Aliases: ALTER PROFILEDROP SETTINGS PROFILE. Level: GLOBAL. Aliases: DROP PROFILESHOW ACCESS. Level: GROUP
SHOW_USERS. Level: GLOBAL. Aliases: SHOW CREATE USERSHOW_ROLES. Level: GLOBAL. Aliases: SHOW CREATE ROLESHOW_ROW_POLICIES. Level: GLOBAL. Aliases: SHOW POLICIES, SHOW CREATE ROW POLICY, SHOW CREATE POLICYSHOW_QUOTAS. Level: GLOBAL. Aliases: SHOW CREATE QUOTASHOW_SETTINGS_PROFILES. Level: GLOBAL. Aliases: SHOW PROFILES, SHOW CREATE SETTINGS PROFILE, SHOW CREATE PROFILEALLOW SQL SECURITY NONE. Level: GLOBAL. Aliases: CREATE SQL SECURITY NONE, SQL SECURITY NONE, SECURITY NONEThe ROLE ADMIN privilege allows a user to assign and revoke any roles including those which are not assigned to the user with the admin option.
Allows a user to execute SYSTEM queries according to the following hierarchy of privileges.
SYSTEM. Level: GROUP
SYSTEM SHUTDOWN. Level: GLOBAL. Aliases: SYSTEM KILL, SHUTDOWNSYSTEM DROP CACHE. Aliases: DROP CACHE
SYSTEM DROP DNS CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR DNS CACHE, SYSTEM DROP DNS, DROP DNS CACHE, DROP DNSSYSTEM DROP MARK CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR MARK CACHE, SYSTEM DROP MARK, DROP MARK CACHE, DROP MARKSSYSTEM DROP UNCOMPRESSED CACHE. Level: GLOBAL. Aliases: SYSTEM CLEAR UNCOMPRESSED CACHE, SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSEDSYSTEM RELOAD. Level: GROUP
SYSTEM RELOAD CONFIG. Level: GLOBAL. Aliases: RELOAD CONFIGSYSTEM RELOAD DICTIONARY. Level: GLOBAL. Aliases: SYSTEM RELOAD DICTIONARIES, RELOAD DICTIONARY, RELOAD DICTIONARIES
SYSTEM RELOAD EMBEDDED DICTIONARIES. Level: GLOBAL. Aliases: RELOAD EMBEDDED DICTIONARIESSYSTEM MERGES. Level: TABLE. Aliases: SYSTEM STOP MERGES, SYSTEM START MERGES, STOP MERGES, START MERGESSYSTEM TTL MERGES. Level: TABLE. Aliases: SYSTEM STOP TTL MERGES, SYSTEM START TTL MERGES, STOP TTL MERGES, START TTL MERGESSYSTEM FETCHES. Level: TABLE. Aliases: SYSTEM STOP FETCHES, SYSTEM START FETCHES, STOP FETCHES, START FETCHESSYSTEM MOVES. Level: TABLE. Aliases: SYSTEM STOP MOVES, SYSTEM START MOVES, STOP MOVES, START MOVESSYSTEM SENDS. Level: GROUP. Aliases: SYSTEM STOP SENDS, SYSTEM START SENDS, STOP SENDS, START SENDS
SYSTEM DISTRIBUTED SENDS. Level: TABLE. Aliases: SYSTEM STOP DISTRIBUTED SENDS, SYSTEM START DISTRIBUTED SENDS, STOP DISTRIBUTED SENDS, START DISTRIBUTED SENDSSYSTEM REPLICATED SENDS. Level: TABLE. Aliases: SYSTEM STOP REPLICATED SENDS, SYSTEM START REPLICATED SENDS, STOP REPLICATED SENDS, START REPLICATED SENDSSYSTEM REPLICATION QUEUES. Level: TABLE. Aliases: SYSTEM STOP REPLICATION QUEUES, SYSTEM START REPLICATION QUEUES, STOP REPLICATION QUEUES, START REPLICATION QUEUESSYSTEM SYNC REPLICA. Level: TABLE. Aliases: SYNC REPLICASYSTEM RESTART REPLICA. Level: TABLE. Aliases: RESTART REPLICASYSTEM FLUSH. Level: GROUP
SYSTEM FLUSH DISTRIBUTED. Level: TABLE. Aliases: FLUSH DISTRIBUTEDSYSTEM FLUSH LOGS. Level: GLOBAL. Aliases: FLUSH LOGSThe SYSTEM RELOAD EMBEDDED DICTIONARIES privilege implicitly granted by the SYSTEM RELOAD DICTIONARY ON *.* privilege.
Allows using introspection functions.
INTROSPECTION. Level: GROUP. Aliases: INTROSPECTION FUNCTIONS
addressToLine. Level: GLOBALaddressToLineWithInlines. Level: GLOBALaddressToSymbol. Level: GLOBALdemangle. Level: GLOBALAllows using external data sources. Applies to table engines and table functions.
READ. Level: GLOBAL_WITH_PARAMETERWRITE. Level: GLOBAL_WITH_PARAMETERPossible parameters:
AZUREFILEHDFSHIVEJDBCKAFKAMONGOMYSQLNATSODBCPOSTGRESRABBITMQREDISREMOTES3SQLITEURL:::note
The separation on READ/WRITE grants for sources is available starting with version 25.7 and only with server setting
access_control_improvements.enable_read_write_grants
Otherwise, you should use the syntax GRANT AZURE ON *.* TO user which is equivalent to the new GRANT READ, WRITE ON AZURE TO user
:::
Examples:
CREATE TABLE (ON db.table_name) and MYSQL privileges.CREATE TEMPORARY TABLE and MYSQL privileges.:::note
This feature is available starting with version 25.8 and only with server setting
access_control_improvements.enable_read_write_grants
:::
You can grant access to specific source URIs by using regular expression filters. This allows fine-grained control over which external data sources users can access.
Syntax:
GRANT READ ON S3('regexp_pattern') TO user
This grant will allow the user to read only from S3 URIs that match the specified regular expression pattern.
Examples:
Grant access to specific S3 bucket paths:
-- Allow user to read only from s3://foo/ paths
GRANT READ ON S3('s3://foo/.*') TO john
-- Allow user to read from specific file patterns
GRANT READ ON S3('s3://mybucket/data/2024/.*\.parquet') TO analyst
-- Multiple filters can be granted to the same user
GRANT READ ON S3('s3://foo/.*') TO john
GRANT READ ON S3('s3://bar/.*') TO john
:::warning
Source filter takes regexp as a parameter, so a grant
GRANT READ ON URL('http://www.google.com') TO john;
will allow queries
SELECT * FROM url('https://www.google.com');
SELECT * FROM url('https://www-google.com');
because . is treated as an Any Single Character in the regexps.
This may lead to potential vulnerability. The correct grant should be
GRANT READ ON URL('https://www\.google\.com') TO john;
:::
Re-granting with GRANT OPTION:
If the original grant has WITH GRANT OPTION, it can be re-granted using GRANT CURRENT GRANTS:
-- Original grant with GRANT OPTION
GRANT READ ON S3('s3://foo/.*') TO john WITH GRANT OPTION
-- John can now regrant this access to others
GRANT CURRENT GRANTS(READ ON S3) TO alice
Important limitations:
GRANT READ ON *('regexp') or similar wildcard-only patterns. Specific source must be provided.dictGet. Aliases: dictHas, dictGetHierarchy, dictIsInAllows a user to execute dictGet, dictHas, dictGetHierarchy, dictIsIn functions.
Privilege level: DICTIONARY.
Examples
GRANT dictGet ON mydb.mydictionary TO johnGRANT dictGet ON mydictionary TO johnAllows a user to view secrets in SHOW and SELECT queries if both
display_secrets_in_show_and_select server setting
and
format_display_secrets_in_show_and_select format setting
are turned on.
Allows a certain operation on a specified named collection. Before version 23.7 it was called NAMED COLLECTION CONTROL, and after 23.7 NAMED COLLECTION ADMIN was added and NAMED COLLECTION CONTROL is preserved as an alias.
NAMED COLLECTION ADMIN. Level: NAMED_COLLECTION. Aliases: NAMED COLLECTION CONTROL
CREATE NAMED COLLECTION. Level: NAMED_COLLECTIONDROP NAMED COLLECTION. Level: NAMED_COLLECTIONALTER NAMED COLLECTION. Level: NAMED_COLLECTIONSHOW NAMED COLLECTIONS. Level: NAMED_COLLECTION. Aliases: SHOW NAMED COLLECTIONSSHOW NAMED COLLECTIONS SECRETS. Level: NAMED_COLLECTION. Aliases: SHOW NAMED COLLECTIONS SECRETSNAMED COLLECTION. Level: NAMED_COLLECTION. Aliases: NAMED COLLECTION USAGE, USE NAMED COLLECTIONUnlike all other grants (CREATE, DROP, ALTER, SHOW) grant NAMED COLLECTION was added only in 23.7, while all others were added earlier - in 22.12.
Examples
Assuming a named collection is called abc, we grant privilege CREATE NAMED COLLECTION to user john.
GRANT CREATE NAMED COLLECTION ON abc TO johnAllows using a specified table engine when creating a table. Applies to table engines.
Examples
GRANT TABLE ENGINE ON * TO johnGRANT TABLE ENGINE ON TinyLog TO john:::note
By default, for backward compatibility reasons, creating a table with a specific table engine ignores grants,
however you can change this behaviour by setting table_engines_require_grant to true
in config.xml.
:::
Grants all the privileges on regulated entity to a user account or a role.
:::note
The privilege ALL is not supported in ClickHouse Cloud, where the default user has limited permissions. Users can grant the maximum permissions to a user by granting the default_role. See here for further details.
Users can also use the GRANT CURRENT GRANTS as the default user to achieve similar effects to ALL.
:::
Doesn't grant any privileges.
The ADMIN OPTION privilege allows a user to grant their role to another user.