跳转到主要内容
  • 向 ClickHouse 用户账户或角色授予 特权
  • 向用户账户或其他角色分配角色。
要撤销特权,请使用 REVOKE 语句。您也可以使用 SHOW GRANTS 语句列出已授予的特权。

权限授予语法

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 — 特权类型。
  • role — ClickHouse 用户角色。
  • user — ClickHouse 用户账户。
WITH GRANT OPTION 子句会授予 userrole 执行 GRANT 查询的权限。用户可以授予与自己已有特权范围相同或更小范围的特权。 WITH REPLACE OPTION 子句会用新特权替换 userrole 的旧特权;如果未指定,则会追加特权。

角色分配语法

GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION] [WITH REPLACE OPTION]
  • role — ClickHouse 用户角色。
  • user — ClickHouse 用户账户。
WITH ADMIN OPTION 子句会向 userrole 授予 ADMIN OPTION 特权。 WITH REPLACE OPTION 子句会将 userrole 的旧角色替换为新角色;如果未指定,则会追加角色。

GRANT CURRENT GRANTS 语法

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 — 特权的类型。
  • role — ClickHouse 用户角色。
  • user — ClickHouse 用户账户。
使用 CURRENT GRANTS 语句可将所有指定特权授予给定的用户或角色。 如果未指定任何特权,则给定的用户或角色将获得 CURRENT_USER 的所有可用特权。

用法

要使用 GRANT,你的账户必须具有 GRANT OPTION 特权。你只能在自己账户所拥有特权的范围内授予特权。 例如,管理员通过以下查询向 john 账户授予特权:
GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION
这意味着 john 有权执行:
  • SELECT x,y FROM db.table
  • SELECT x FROM db.table
  • SELECT y FROM db.table
john 不能执行 SELECT z FROM db.tableSELECT * FROM db.table 也不允许。处理该查询时,ClickHouse 不会返回任何数据,连 xy 也不会返回。唯一的例外是表中只有 xy 两列。在这种情况下,ClickHouse 会返回全部数据。 此外,john 还拥有 GRANT OPTION 特权,因此可以将相同或更小范围的权限授予其他用户。 始终允许访问 system 数据库 (因为处理查询时会使用该数据库) 。
虽然新用户默认可以访问许多系统表,但在没有授权的情况下,他们默认可能无法访问所有系统表。 此外,出于安全原因,Cloud 用户对某些系统表 (例如 system.zookeeper) 的访问会受到限制。
你可以在一条查询中向多个账户授予多项权限。查询 GRANT SELECT, INSERT ON *.* TO john, robin 允许账户 johnrobin 对服务器上所有数据库中的所有表执行 INSERTSELECT 查询。

通配符授权

指定特权时,可以使用星号 (*) 代替表名或数据库名。例如,GRANT SELECT ON db.* TO john 查询允许 johndb 数据库中的所有表执行 SELECT 查询。 此外,你还可以省略数据库名。在这种情况下,特权会授予当前数据库。 例如,GRANT SELECT ON * TO john 会授予当前数据库中所有表的特权,GRANT SELECT ON mytable TO john 会授予当前数据库中 mytable 表的特权。
下文所述功能自 ClickHouse 24.10 版本起可用。
你也可以在表名或数据库名末尾使用星号。此功能允许你基于表路径的前缀模式授予特权。 示例:GRANT SELECT ON db.my_tables* TO john。该查询允许 johndb 数据库中所有名称匹配 my_tables* 前缀模式的表执行 SELECT 查询。 更多示例: GRANT SELECT ON db.my_tables* TO john
SELECT * FROM db.my_tables -- 已授权
SELECT * FROM db.my_tables_0 -- 已授权
SELECT * FROM db.my_tables_1 -- 已授权

SELECT * FROM db.other_table -- 未授权
SELECT * FROM db2.my_tables -- 未授权
GRANT SELECT ON db*.* TO john
SELECT * FROM db.my_tables -- 已授权
SELECT * FROM db.my_tables_0 -- 已授权
SELECT * FROM db.my_tables_1 -- 已授权
SELECT * FROM db.other_table -- 已授权
SELECT * FROM db2.my_tables -- 已授权
在已授权路径下新创建的所有表,都会自动继承其父路径的全部授权。 例如,如果你执行 GRANT SELECT ON db.* TO john 查询,然后创建一个新表 db.new_table,那么用户 john 将能够执行 SELECT * FROM db.new_table 查询。 只能为前缀指定星号:
GRANT SELECT ON db.* TO john -- 正确
GRANT SELECT ON db*.* TO john -- 正确

GRANT SELECT ON *.my_table TO john -- 错误
GRANT SELECT ON foo*bar TO john -- 错误
GRANT SELECT ON *suffix TO john -- 错误
GRANT SELECT(foo) ON db.table* TO john -- 错误

特权

特权是授予用户、用于执行特定类型查询的权限。 特权具有层级结构,允许执行哪些查询取决于特权的作用范围。 ClickHouse 的特权层级如下所示:
  • ALL
    • 访问管理
      • ALLOW SQL SECURITY NONE
      • ALTER QUOTA
      • ALTER ROLE
      • ALTER ROW POLICY
      • ALTER SETTINGS PROFILE
      • ALTER USER
      • CREATE QUOTA
      • CREATE ROLE
      • CREATE ROW POLICY
      • CREATE SETTINGS PROFILE
      • CREATE USER
      • DROP QUOTA
      • DROP ROLE
      • DROP ROW POLICY
      • DROP SETTINGS PROFILE
      • DROP USER
      • ROLE ADMIN
      • SHOW ACCESS
        • SHOW QUOTAS
        • SHOW ROLES
        • SHOW ROW POLICIES
        • SHOW SETTINGS PROFILES
        • SHOW USERS
    • ALTER
      • ALTER DATABASE
        • ALTER DATABASE SETTINGS
      • ALTER TABLE
        • ALTER COLUMN
          • ALTER ADD COLUMN
          • ALTER CLEAR COLUMN
          • ALTER COMMENT COLUMN
          • ALTER DROP COLUMN
          • ALTER MATERIALIZE COLUMN
          • ALTER MODIFY COLUMN
          • ALTER RENAME COLUMN
        • ALTER CONSTRAINT
          • ALTER ADD CONSTRAINT
          • ALTER DROP CONSTRAINT
        • ALTER DELETE
        • ALTER FETCH PARTITION
        • ALTER FREEZE PARTITION
        • ALTER INDEX
          • ALTER ADD INDEX
          • ALTER CLEAR INDEX
          • ALTER DROP INDEX
          • ALTER MATERIALIZE INDEX
          • ALTER ORDER BY
          • ALTER SAMPLE BY
        • ALTER MATERIALIZE TTL
        • ALTER MODIFY COMMENT
        • ALTER MOVE PARTITION
        • ALTER PROJECTION
        • ALTER SETTINGS
        • ALTER STATISTICS
          • ALTER ADD STATISTICS
          • ALTER DROP STATISTICS
          • ALTER MATERIALIZE STATISTICS
          • ALTER MODIFY STATISTICS
        • ALTER TTL
        • ALTER UPDATE
        • ALTER TABLE EXECUTE
      • ALTER VIEW
        • ALTER VIEW MODIFY QUERY
        • ALTER VIEW REFRESH
        • ALTER VIEW MODIFY SQL SECURITY
    • BACKUP
    • CLUSTER
    • CREATE
      • CREATE ARBITRARY TEMPORARY TABLE
        • CREATE TEMPORARY TABLE
      • CREATE DATABASE
      • CREATE DICTIONARY
      • CREATE FUNCTION
      • CREATE RESOURCE
      • CREATE TABLE
      • CREATE VIEW
      • CREATE WORKLOAD
    • dictGet
    • displaySecretsInShowAndSelect
    • DROP
      • DROP DATABASE
      • DROP DICTIONARY
      • DROP FUNCTION
      • DROP RESOURCE
      • DROP TABLE
      • DROP VIEW
      • DROP WORKLOAD
    • INSERT
    • 内部信息
      • addressToLine
      • addressToLineWithInlines
      • addressToSymbol
      • demangle
    • KILL QUERY
    • KILL TRANSACTION
    • MOVE PARTITION BETWEEN SHARDS
    • NAMED COLLECTION ADMIN
      • ALTER NAMED COLLECTION
      • CREATE NAMED COLLECTION
      • DROP NAMED COLLECTION
      • NAMED COLLECTION
      • SHOW NAMED COLLECTIONS
      • SHOW NAMED COLLECTIONS SECRETS
    • OPTIMIZE
    • SELECT
    • SET DEFINER
    • SHOW
      • SHOW COLUMNS
      • SHOW DATABASES
      • SHOW DICTIONARIES
      • SHOW TABLES
    • SHOW FILESYSTEM CACHES
    • 数据源
      • AZURE
      • FILE
      • HDFS
      • HIVE
      • JDBC
      • KAFKA
      • MONGO
      • MYSQL
      • NATS
      • ODBC
      • POSTGRES
      • RABBITMQ
      • REDIS
      • REMOTE
      • S3
      • SQLITE
      • URL
    • SYSTEM
      • SYSTEM CLEANUP
      • SYSTEM DROP CACHE
        • SYSTEM DROP COMPILED EXPRESSION CACHE
        • SYSTEM DROP CONNECTIONS CACHE
        • SYSTEM DROP DISTRIBUTED CACHE
        • SYSTEM DROP DNS CACHE
        • SYSTEM DROP FILESYSTEM CACHE
        • SYSTEM DROP FORMAT SCHEMA CACHE
        • SYSTEM DROP MARK CACHE
        • SYSTEM DROP MMAP CACHE
        • SYSTEM DROP PAGE CACHE
        • SYSTEM DROP PRIMARY INDEX CACHE
        • SYSTEM DROP QUERY CACHE
        • SYSTEM DROP S3 CLIENT CACHE
        • SYSTEM DROP SCHEMA CACHE
        • SYSTEM DROP UNCOMPRESSED CACHE
      • SYSTEM DROP PRIMARY INDEX CACHE
      • SYSTEM DROP REPLICA
      • SYSTEM FAILPOINT
      • SYSTEM FETCHES
      • SYSTEM FLUSH
        • SYSTEM FLUSH ASYNC INSERT QUEUE
        • SYSTEM FLUSH LOGS
      • SYSTEM JEMALLOC
      • SYSTEM KILL QUERY
      • SYSTEM KILL TRANSACTION
      • SYSTEM LISTEN
      • SYSTEM LOAD PRIMARY KEY
      • SYSTEM MERGES
      • SYSTEM MOVES
      • SYSTEM PULLING REPLICATION LOG
      • SYSTEM REDUCE BLOCKING PARTS
      • SYSTEM REPLICATION QUEUES
      • SYSTEM REPLICA READINESS
      • SYSTEM RESTART DISK
      • SYSTEM RESTART REPLICA
      • SYSTEM RESTORE REPLICA
      • SYSTEM RELOAD
        • SYSTEM RELOAD ASYNCHRONOUS METRICS
        • SYSTEM RELOAD CONFIG
          • SYSTEM RELOAD DICTIONARY
          • SYSTEM RELOAD EMBEDDED DICTIONARIES
          • SYSTEM RELOAD FUNCTION
          • SYSTEM RELOAD MODEL
          • SYSTEM RELOAD USERS
      • SYSTEM SENDS
        • SYSTEM DISTRIBUTED SENDS
        • SYSTEM REPLICATED SENDS
      • SYSTEM SHUTDOWN
      • SYSTEM SYNC DATABASE REPLICA
      • SYSTEM SYNC FILE CACHE
      • SYSTEM SYNC FILESYSTEM CACHE
      • SYSTEM SYNC REPLICA
      • SYSTEM SYNC TRANSACTION LOG
      • SYSTEM THREAD FUZZER
      • SYSTEM TTL MERGES
      • SYSTEM UNFREEZE
      • SYSTEM UNLOAD PRIMARY KEY
      • SYSTEM VIEWS
      • SYSTEM VIRTUAL PARTS UPDATE
      • SYSTEM WAIT LOADING PARTS
    • 表引擎
    • TRUNCATE
    • UNDROP TABLE
  • NONE
此层级的处理方式示例如下:
  • ALTER 特权包含所有其他 ALTER* 特权。
  • ALTER CONSTRAINT 包含 ALTER ADD CONSTRAINTALTER DROP CONSTRAINT 特权。
特权可在不同级别应用。了解某个级别后,就能判断该特权可使用的语法。 级别 (从低到高) :
  • COLUMN — 特权可授予列、表、数据库或全局。
  • TABLE — 特权可授予表、数据库或全局。
  • VIEW — 特权可授予视图、数据库或全局。
  • DICTIONARY — 特权可授予字典、数据库或全局。
  • DATABASE — 特权可授予数据库或全局。
  • GLOBAL — 特权只能在全局级别授予。
  • GROUP — 对不同级别的特权进行分组。授予 GROUP 级别的特权时,只会授予该组中与所使用语法相对应的那些特权。
允许的语法示例:
  • GRANT SELECT(x) ON db.table TO user
  • GRANT SELECT ON db.* TO user
不允许的语法示例:
  • GRANT CREATE USER(x) ON db.table TO user
  • GRANT CREATE USER ON db.* TO user
特殊特权 ALL 会将所有特权授予某个用户账户或角色。 默认情况下,用户账户或角色不具备任何特权。 如果用户或角色没有任何特权,则会显示为 NONE 特权。 某些查询在实现上需要一组特权。例如,要执行 RENAME 查询,你需要以下特权:SELECTCREATE TABLEINSERTDROP TABLE

SELECT

允许执行 SELECT 查询。 特权级别:COLUMN 说明 被授予此特权的用户可以对指定数据库中指定表的指定列执行 SELECT 查询。如果查询中包含了未指定的其他列,则不会返回任何数据。 请看下面这个特权:
GRANT SELECT(x,y) ON db.table TO john
此特权允许 john 执行任何涉及 db.tablex 和/或 y 列数据的 SELECT 查询,例如 SELECT x FROM db.tablejohn 不能执行 SELECT z FROM db.tableSELECT * FROM db.table 同样不被允许。处理此查询时,ClickHouse 不会返回任何数据,包括 xy 在内。唯一的例外是当表中只包含 xy 列时,此时 ClickHouse 会返回所有数据。

INSERT

允许执行 INSERT 查询。 特权级别:COLUMN 描述 被授予此特权的用户,可以对指定数据库和表中指定的一组列执行 INSERT 查询。如果用户包含了未指定的其他列,则查询不会插入任何数据。 示例
GRANT INSERT(x,y) ON db.table TO john
已授予的特权允许 johndb.tablex 和/或 y 列中插入数据。

ALTER

允许按照以下特权层级执行 ALTER 查询:
  • ALTER。级别:COLUMN
    • ALTER TABLE。级别:GROUP
    • ALTER UPDATE。级别:COLUMN。别名:UPDATE
    • ALTER DELETE。级别:COLUMN。别名:DELETE
    • ALTER COLUMN。级别:GROUP
    • ALTER ADD COLUMN。级别:COLUMN。别名:ADD COLUMN
    • ALTER DROP COLUMN。级别:COLUMN。别名:DROP COLUMN
    • ALTER MODIFY COLUMN。级别:COLUMN。别名:MODIFY COLUMN
    • ALTER COMMENT COLUMN。级别:COLUMN。别名:COMMENT COLUMN
    • ALTER CLEAR COLUMN。级别:COLUMN。别名:CLEAR COLUMN
    • ALTER RENAME COLUMN。级别:COLUMN。别名:RENAME COLUMN
    • ALTER INDEX。级别:GROUP。别名:INDEX
    • ALTER ORDER BY。级别:TABLE。别名:ALTER MODIFY ORDER BY, MODIFY ORDER BY
    • ALTER SAMPLE BY。级别:TABLE。别名:ALTER MODIFY SAMPLE BY, MODIFY SAMPLE BY
    • ALTER ADD INDEX。级别:TABLE。别名:ADD INDEX
    • ALTER DROP INDEX。级别:TABLE。别名:DROP INDEX
    • ALTER MATERIALIZE INDEX。级别:TABLE。别名:MATERIALIZE INDEX
    • ALTER CLEAR INDEX。级别:TABLE。别名:CLEAR INDEX
    • ALTER CONSTRAINT。级别:GROUP。别名:CONSTRAINT
    • ALTER ADD CONSTRAINT。级别:TABLE。别名:ADD CONSTRAINT
    • ALTER DROP CONSTRAINT。级别:TABLE。别名:DROP CONSTRAINT
    • ALTER TTL。级别:TABLE。别名:ALTER MODIFY TTL, MODIFY TTL
    • ALTER MATERIALIZE TTL。级别:TABLE。别名:MATERIALIZE TTL
    • ALTER SETTINGS。级别:TABLE。别名:ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING
    • ALTER MOVE PARTITION。级别:TABLE。别名:ALTER MOVE PART, MOVE PARTITION, MOVE PART
    • ALTER FETCH PARTITION。级别:TABLE。别名:ALTER FETCH PART, FETCH PARTITION, FETCH PART
    • ALTER FREEZE PARTITION。级别:TABLE。别名:FREEZE PARTITION
    • ALTER EXECUTE。级别:TABLE。别名:ALTER TABLE EXECUTE
    • ALTER VIEW。级别:GROUP
    • ALTER VIEW REFRESH。级别:VIEW。别名:REFRESH VIEW
    • ALTER VIEW MODIFY QUERY。级别:VIEW。别名:ALTER TABLE MODIFY QUERY
    • ALTER VIEW MODIFY SQL SECURITY。级别:VIEW。别名:ALTER TABLE MODIFY SQL SECURITY
此层级按如下方式处理:
  • ALTER 特权包含所有其他 ALTER* 特权。
  • ALTER CONSTRAINT 包含 ALTER ADD CONSTRAINTALTER DROP CONSTRAINT 特权。
注意
  • MODIFY SETTING 特权允许修改表引擎设置。它不会影响其他设置或服务器配置参数。
  • ATTACH 操作需要 CREATE 特权。
  • DETACH 操作需要 DROP 特权。
  • 要通过 KILL MUTATION 查询停止变更,你需要拥有启动该变更所需的特权。例如,如果你想停止 ALTER UPDATE 查询,则需要 ALTER UPDATEALTER TABLEALTER 特权。

BACKUP

允许在查询中执行 [BACKUP]。有关 backups 的更多信息,请参阅”备份与恢复”

CREATE

允许按照以下特权层级执行 CREATEATTACH DDL 查询:
  • CREATE。级别:GROUP
    • CREATE DATABASE。级别:DATABASE
    • CREATE TABLE。级别:TABLE
      • CREATE ARBITRARY TEMPORARY TABLE。级别:GLOBAL
        • CREATE TEMPORARY TABLE。级别:GLOBAL
    • CREATE VIEW。级别:VIEW
    • CREATE DICTIONARY。级别:DICTIONARY
注意
  • 要删除已创建的表,用户需要 DROP 特权。

CLUSTER

允许执行 ON CLUSTER 查询。
Syntax
GRANT CLUSTER ON *.* TO <username>
默认情况下,带有 ON CLUSTER 的查询要求用户拥有 CLUSTER 授权。 如果在未先授予 CLUSTER 特权的情况下尝试在查询中使用 ON CLUSTER,则会出现以下错误:
特权不足。要执行此查询,必须拥有 CLUSTER ON *.* 的授权。 
可以通过将 config.xmlaccess_control_improvements 部分里的 on_cluster_queries_require_cluster_grant 设置项 (见下文) 设为 false 来更改默认行为。
config.xml
<access_control_improvements>
    <on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
</access_control_improvements>

DROP

允许按以下特权层级执行 DROPDETACH 查询:
  • DROP。级别:GROUP
    • DROP DATABASE。级别:DATABASE
    • DROP TABLE。级别:TABLE
    • DROP VIEW。级别:VIEW
    • DROP DICTIONARY。级别:DICTIONARY

TRUNCATE

允许执行 TRUNCATE 查询。 特权级别:TABLE

OPTIMIZE

允许执行 OPTIMIZE TABLE 语句。 权限级别:TABLE

SHOW

允许按照以下特权层级执行 SHOWDESCRIBEUSEEXISTS 查询:
  • SHOW。级别:GROUP
    • SHOW DATABASES。级别:DATABASE。允许执行 SHOW DATABASESSHOW CREATE DATABASEUSE <database> 查询。
    • SHOW TABLES。级别:TABLE。允许执行 SHOW TABLESEXISTS <table>CHECK <table> 查询。
    • SHOW COLUMNS。级别:COLUMN。允许执行 SHOW CREATE TABLEDESCRIBE 查询。
    • SHOW DICTIONARIES。级别:DICTIONARY。允许执行 SHOW DICTIONARIESSHOW CREATE DICTIONARYEXISTS <dictionary> 查询。
说明 如果用户对指定的表、字典或数据库拥有任何其他特权,也就拥有 SHOW 特权。

KILL QUERY

允许按照以下特权层级执行 KILL 查询: 特权级别:GLOBAL 注意 KILL QUERY 特权允许用户终止其他用户的查询。

访问管理

允许用户执行管理用户、角色和行策略的查询。
  • ACCESS MANAGEMENT。级别:GROUP
    • CREATE USER。级别:GLOBAL
    • ALTER USER。级别:GLOBAL
    • DROP USER。级别:GLOBAL
    • CREATE ROLE。级别:GLOBAL
    • ALTER ROLE。级别:GLOBAL
    • DROP ROLE。级别:GLOBAL
    • ROLE ADMIN。级别:GLOBAL
    • CREATE ROW POLICY。级别:GLOBAL。别名:CREATE POLICY
    • ALTER ROW POLICY。级别:GLOBAL。别名:ALTER POLICY
    • DROP ROW POLICY。级别:GLOBAL。别名:DROP POLICY
    • CREATE QUOTA。级别:GLOBAL
    • ALTER QUOTA。级别:GLOBAL
    • DROP QUOTA。级别:GLOBAL
    • CREATE SETTINGS PROFILE。级别:GLOBAL。别名:CREATE PROFILE
    • ALTER SETTINGS PROFILE。级别:GLOBAL。别名:ALTER PROFILE
    • DROP SETTINGS PROFILE。级别:GLOBAL。别名:DROP PROFILE
    • SHOW ACCESS。级别:GROUP
      • SHOW_USERS。级别:GLOBAL。别名:SHOW CREATE USER
      • SHOW_ROLES。级别:GLOBAL。别名:SHOW CREATE ROLE
      • SHOW_ROW_POLICIES。级别:GLOBAL。别名:SHOW POLICIESSHOW CREATE ROW POLICYSHOW CREATE POLICY
      • SHOW_QUOTAS。级别:GLOBAL。别名:SHOW CREATE QUOTA
      • SHOW_SETTINGS_PROFILES。级别:GLOBAL。别名:SHOW PROFILESSHOW CREATE SETTINGS PROFILESHOW CREATE PROFILE
    • ALLOW SQL SECURITY NONE。级别:GLOBAL。别名:CREATE SQL SECURITY NONESQL SECURITY NONESECURITY NONE
ROLE ADMIN 特权允许用户授予和撤销任何角色,包括未以 admin 选项授予该用户的角色。

SYSTEM

允许用户按照以下特权层级执行 SYSTEM 查询。
  • SYSTEM。级别:GROUP
    • SYSTEM SHUTDOWN。级别:GLOBAL。别名:SYSTEM KILL, SHUTDOWN
    • SYSTEM DROP CACHE。别名:DROP CACHE
      • SYSTEM DROP DNS CACHE。级别:GLOBAL。别名:SYSTEM CLEAR DNS CACHE, SYSTEM DROP DNS, DROP DNS CACHE, DROP DNS
      • SYSTEM DROP MARK CACHE。级别:GLOBAL。别名:SYSTEM CLEAR MARK CACHE, SYSTEM DROP MARK, DROP MARK CACHE, DROP MARKS
      • SYSTEM DROP UNCOMPRESSED CACHE。级别:GLOBAL。别名:SYSTEM CLEAR UNCOMPRESSED CACHE, SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSED
    • SYSTEM RELOAD。级别:GROUP
      • SYSTEM RELOAD CONFIG。级别:GLOBAL。别名:RELOAD CONFIG
      • SYSTEM RELOAD DICTIONARY。级别:GLOBAL。别名:SYSTEM RELOAD DICTIONARIES, RELOAD DICTIONARY, RELOAD DICTIONARIES
        • SYSTEM RELOAD EMBEDDED DICTIONARIES。级别:GLOBAL。别名:RELOAD EMBEDDED DICTIONARIES
    • SYSTEM MERGES。级别:TABLE。别名:SYSTEM STOP MERGES, SYSTEM START MERGES, STOP MERGES, START MERGES
    • SYSTEM TTL MERGES。级别:TABLE。别名:SYSTEM STOP TTL MERGES, SYSTEM START TTL MERGES, STOP TTL MERGES, START TTL MERGES
    • SYSTEM FETCHES。级别:TABLE。别名:SYSTEM STOP FETCHES, SYSTEM START FETCHES, STOP FETCHES, START FETCHES
    • SYSTEM MOVES。级别:TABLE。别名:SYSTEM STOP MOVES, SYSTEM START MOVES, STOP MOVES, START MOVES
    • SYSTEM SENDS。级别:GROUP。别名:SYSTEM STOP SENDS, SYSTEM START SENDS, STOP SENDS, START SENDS
      • SYSTEM DISTRIBUTED SENDS。级别:TABLE。别名:SYSTEM STOP DISTRIBUTED SENDS, SYSTEM START DISTRIBUTED SENDS, STOP DISTRIBUTED SENDS, START DISTRIBUTED SENDS
      • SYSTEM 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 QUEUES
    • SYSTEM SYNC REPLICA。级别:TABLE。别名:SYNC REPLICA
    • SYSTEM RESTART REPLICA。级别:TABLE。别名:RESTART REPLICA
    • SYSTEM FLUSH。级别:GROUP
      • SYSTEM FLUSH DISTRIBUTED。级别:TABLE。别名:FLUSH DISTRIBUTED
      • SYSTEM FLUSH LOGS。级别:GLOBAL。别名:FLUSH LOGS
SYSTEM RELOAD DICTIONARY ON *.* 特权会隐式授予 SYSTEM RELOAD EMBEDDED DICTIONARIES 特权。

INTROSPECTION

允许使用内部信息相关函数。
  • INTROSPECTION。级别:GROUP。别名:INTROSPECTION FUNCTIONS
    • addressToLine。级别:GLOBAL
    • addressToLineWithInlines。级别:GLOBAL
    • addressToSymbol。级别:GLOBAL
    • demangle。级别:GLOBAL

SOURCES

允许使用外部数据源。适用于表引擎表函数
  • READ。级别:GLOBAL_WITH_PARAMETER
  • WRITE。级别:GLOBAL_WITH_PARAMETER
可用参数:
  • AZURE
  • FILE
  • HDFS
  • HIVE
  • JDBC
  • KAFKA
  • MONGO
  • MYSQL
  • NATS
  • ODBC
  • POSTGRES
  • RABBITMQ
  • REDIS
  • REMOTE
  • S3
  • SQLITE
  • URL
从 25.7 版本开始,只有在启用服务器设置 access_control_improvements.enable_read_write_grants 时,才支持对数据源的 READ/WRITE 授权进行拆分。否则,应使用语法 GRANT AZURE ON *.* TO user,其等同于新的 GRANT READ, WRITE ON AZURE TO user
示例:
  • 要使用MySQL 表引擎创建表,你需要 CREATE TABLE (ON db.table_name)MYSQL 特权。
  • 要使用mysql 表函数,你需要 CREATE TEMPORARY TABLEMYSQL 特权。

源过滤器授权

此功能自 25.8 版本起可用,且仅在启用服务器设置 access_control_improvements.enable_read_write_grants 时可用
你可以使用正则表达式过滤器,向特定源 URI 授予访问权限。这样可以更细粒度地控制用户能够访问哪些外部数据源。 语法:
GRANT READ ON S3('regexp_pattern') TO user
此授权将仅允许用户从与指定正则表达式匹配的 S3 URI 中读取数据。 示例: 授予对特定 S3 bucket 路径的访问权限:
-- 仅允许用户从 s3://foo/ 路径下读取
GRANT READ ON S3('s3://foo/.*') TO john

-- 允许用户从特定文件模式匹配的路径读取
GRANT READ ON S3('s3://mybucket/data/2024/.*\.parquet') TO analyst

-- 可将多个过滤器授予同一用户
GRANT READ ON S3('s3://foo/.*') TO john
GRANT READ ON S3('s3://bar/.*') TO john
source 过滤器将 regexp 用作参数,因此以下授权 GRANT READ ON URL('http://www.google.com') TO john;会允许执行下面这些查询:
SELECT * FROM url('https://www.google.com');
SELECT * FROM url('https://www-google.com');
因为在正则表达式中,. 会被当作 任意单个字符。 这可能会引入潜在漏洞。正确的授权应为
GRANT READ ON URL('https://www\.google\.com') TO john;
使用 GRANT OPTION 进行再次授权: 如果原始授权带有 WITH GRANT OPTION,则可以使用 GRANT CURRENT GRANTS 再次授权:
-- 带有 GRANT OPTION 的原始授权
GRANT READ ON S3('s3://foo/.*') TO john WITH GRANT OPTION

-- John 现在可以将此访问权限转授给其他人
GRANT CURRENT GRANTS(READ ON S3) TO alice
重要限制:
  • 不允许部分撤销: 你不能只撤销已授权过滤模式中的一部分。如有需要,必须先撤销整个授权,再使用新的模式重新授权。
  • 不允许通配符授权: 你不能使用 GRANT READ ON *('regexp') 或类似仅使用通配符的模式。必须指定具体的 source。

dictGet

  • dictGet。别名:dictHasdictGetHierarchydictIsIn
允许用户执行 dictGetdictHasdictGetHierarchydictIsIn 函数。 权限级别:DICTIONARY 示例
  • GRANT dictGet ON mydb.mydictionary TO john
  • GRANT dictGet ON mydictionary TO john

displaySecretsInShowAndSelect

如果同时启用 display_secrets_in_show_and_select 服务器设置format_display_secrets_in_show_and_select 格式设置, 则允许用户在 SHOWSELECT 查询中查看 secrets。

NAMED COLLECTION ADMIN

允许对指定的命名集合执行特定操作。在 23.7 版本之前,它称为 NAMED COLLECTION CONTROL;自 23.7 起,新增了 NAMED COLLECTION ADMIN,并保留 NAMED COLLECTION CONTROL 作为别名。
  • NAMED COLLECTION ADMIN。级别:NAMED_COLLECTION。别名:NAMED COLLECTION CONTROL
    • CREATE NAMED COLLECTION。级别:NAMED_COLLECTION
    • DROP NAMED COLLECTION。级别:NAMED_COLLECTION
    • ALTER NAMED COLLECTION。级别:NAMED_COLLECTION
    • SHOW NAMED COLLECTIONS。级别:NAMED_COLLECTION。别名:SHOW NAMED COLLECTIONS
    • SHOW NAMED COLLECTIONS SECRETS。级别:NAMED_COLLECTION。别名:SHOW NAMED COLLECTIONS SECRETS
    • NAMED COLLECTION。级别:NAMED_COLLECTION。别名:NAMED COLLECTION USAGE, USE NAMED COLLECTION
与其他所有授权 (CREATE、DROP、ALTER、SHOW) 不同,NAMED COLLECTION 授权直到 23.7 才加入,而其他几项均更早在 22.12 就已加入。 示例 假设有一个名为 abc 的命名集合,我们将 CREATE NAMED COLLECTION 特权授予用户 john。
  • GRANT CREATE NAMED COLLECTION ON abc TO john

表引擎

允许在创建表时使用指定的表引擎。适用于表引擎 示例
  • GRANT TABLE ENGINE ON * TO john
  • GRANT TABLE ENGINE ON TinyLog TO john
默认情况下,出于向后兼容的考虑,使用特定表引擎创建表时会忽略授权检查; 不过,你可以通过在 config.xml 中table_engines_require_grant 设置为 true 来更改这一行为。
某些带有外部源的表引擎可能需要对相应源具有 READ/WRITE 权限。请参见 Sources 例如,对于 AzureBlobStorage 表引擎,可能需要以下授权。
  • GRANT READ, WRITE ON AZURE TO john

ALL

将受管实体上的所有特权授予某个用户账户或角色。
ClickHouse Cloud 不支持 ALL 特权,其中 default 用户的权限受限。用户可以通过授予 default_role,向某个用户授予最大权限。更多详情请参见此处。 用户也可以使用 GRANT CURRENT GRANTS,并以 default 用户身份执行,以获得与 ALL 类似的效果。

NONE

不授予任何特权。

ADMIN OPTION

ADMIN OPTION 特权允许用户将自己的角色授予其他用户。
最后修改于 2026年6月10日