> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-86180b7b.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> GRANT 语句文档

# GRANT 语句

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

* 向 ClickHouse 用户账户或角色授予 [特权](#privileges)。
* 向用户账户或其他角色分配角色。

要撤销特权，请使用 [REVOKE](/zh/reference/statements/revoke) 语句。您也可以使用 [SHOW GRANTS](/zh/reference/statements/show#show-grants) 语句列出已授予的特权。

<div id="granting-privilege-syntax">
  ## 权限授予语法
</div>

```sql theme={null}
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` 子句会授予 `user` 或 `role` 执行 `GRANT` 查询的权限。用户可以授予与自己已有特权范围相同或更小范围的特权。
`WITH REPLACE OPTION` 子句会用新特权替换 `user` 或 `role` 的旧特权；如果未指定，则会追加特权。

<div id="assigning-role-syntax">
  ## 角色分配语法
</div>

```sql theme={null}
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` 子句会向 `user` 或 `role` 授予 [ADMIN OPTION](#admin-option) 特权。
`WITH REPLACE OPTION` 子句会将 `user` 或 `role` 的旧角色替换为新角色；如果未指定，则会追加角色。

<div id="grant-current-grants-syntax">
  ## GRANT CURRENT GRANTS 语法
</div>

```sql theme={null}
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` 的所有可用特权。

<div id="usage">
  ## 用法
</div>

要使用 `GRANT`，你的账户必须具有 `GRANT OPTION` 特权。你只能在自己账户所拥有特权的范围内授予特权。

例如，管理员通过以下查询向 `john` 账户授予特权：

```sql theme={null}
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.table`。`SELECT * FROM db.table` 也不允许。处理该查询时，ClickHouse 不会返回任何数据，连 `x` 和 `y` 也不会返回。唯一的例外是表中只有 `x` 和 `y` 两列。在这种情况下，ClickHouse 会返回全部数据。

此外，`john` 还拥有 `GRANT OPTION` 特权，因此可以将相同或更小范围的权限授予其他用户。

始终允许访问 `system` 数据库 (因为处理查询时会使用该数据库) 。

<Note>
  虽然新用户默认可以访问许多系统表，但在没有授权的情况下，他们默认可能无法访问所有系统表。
  此外，出于安全原因，Cloud 用户对某些系统表 (例如 `system.zookeeper`) 的访问会受到限制。
</Note>

你可以在一条查询中向多个账户授予多项权限。查询 `GRANT SELECT, INSERT ON *.* TO john, robin` 允许账户 `john` 和 `robin` 对服务器上所有数据库中的所有表执行 `INSERT` 和 `SELECT` 查询。

<div id="wildcard-grants">
  ## 通配符授权
</div>

指定特权时，可以使用星号 (`*`) 代替表名或数据库名。例如，`GRANT SELECT ON db.* TO john` 查询允许 `john` 对 `db` 数据库中的所有表执行 `SELECT` 查询。
此外，你还可以省略数据库名。在这种情况下，特权会授予当前数据库。
例如，`GRANT SELECT ON * TO john` 会授予当前数据库中所有表的特权，`GRANT SELECT ON mytable TO john` 会授予当前数据库中 `mytable` 表的特权。

<Note>
  下文所述功能自 ClickHouse 24.10 版本起可用。
</Note>

你也可以在表名或数据库名末尾使用星号。此功能允许你基于表路径的前缀模式授予特权。
示例：`GRANT SELECT ON db.my_tables* TO john`。该查询允许 `john` 对 `db` 数据库中所有名称匹配 `my_tables*` 前缀模式的表执行 `SELECT` 查询。

更多示例：

`GRANT SELECT ON db.my_tables* TO john`

```sql theme={null}
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`

```sql theme={null}
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` 查询。

你**只能**为前缀指定星号：

```sql theme={null}
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 -- 错误
```

<div id="privileges">
  ## 特权
</div>

特权是授予用户、用于执行特定类型查询的权限。

特权具有层级结构，允许执行哪些查询取决于特权的作用范围。

ClickHouse 的特权层级如下所示：

* [`ALL`](#all)
  * [`访问管理`](#access-management)
    * `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)
    * `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`](#backup)
  * [`CLUSTER`](#cluster)
  * [`CREATE`](#create)
    * `CREATE ARBITRARY TEMPORARY TABLE`
      * `CREATE TEMPORARY TABLE`
    * `CREATE DATABASE`
    * `CREATE DICTIONARY`
    * `CREATE FUNCTION`
    * `CREATE RESOURCE`
    * `CREATE TABLE`
    * `CREATE VIEW`
    * `CREATE WORKLOAD`
  * [`dictGet`](#dictget)
  * [`displaySecretsInShowAndSelect`](#displaysecretsinshowandselect)
  * [`DROP`](#drop)
    * `DROP DATABASE`
    * `DROP DICTIONARY`
    * `DROP FUNCTION`
    * `DROP RESOURCE`
    * `DROP TABLE`
    * `DROP VIEW`
    * `DROP WORKLOAD`
  * [`INSERT`](#insert)
  * [`内部信息`](#introspection)
    * `addressToLine`
    * `addressToLineWithInlines`
    * `addressToSymbol`
    * `demangle`
  * `KILL QUERY`
  * `KILL TRANSACTION`
  * `MOVE PARTITION BETWEEN SHARDS`
  * [`NAMED COLLECTION ADMIN`](#named-collection-admin)
    * `ALTER NAMED COLLECTION`
    * `CREATE NAMED COLLECTION`
    * `DROP NAMED COLLECTION`
    * `NAMED COLLECTION`
    * `SHOW NAMED COLLECTIONS`
    * `SHOW NAMED COLLECTIONS SECRETS`
  * [`OPTIMIZE`](#optimize)
  * [`SELECT`](#select)
  * [`SET DEFINER`](/zh/reference/statements/create/view#sql_security)
  * [`SHOW`](#show)
    * `SHOW COLUMNS`
    * `SHOW DATABASES`
    * `SHOW DICTIONARIES`
    * `SHOW TABLES`
  * `SHOW FILESYSTEM CACHES`
  * [`数据源`](#sources)
    * `AZURE`
    * `FILE`
    * `HDFS`
    * `HIVE`
    * `JDBC`
    * `KAFKA`
    * `MONGO`
    * `MYSQL`
    * `NATS`
    * `ODBC`
    * `POSTGRES`
    * `RABBITMQ`
    * `REDIS`
    * `REMOTE`
    * `S3`
    * `SQLITE`
    * `URL`
  * [`SYSTEM`](#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`
  * [`表引擎`](#table-engine)
  * [`TRUNCATE`](#truncate)
  * `UNDROP TABLE`
* [`NONE`](#none)

此层级的处理方式示例如下：

* `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 user`
* `GRANT SELECT ON db.* TO user`

不允许的语法示例：

* `GRANT CREATE USER(x) ON db.table TO user`
* `GRANT CREATE USER ON db.* TO user`

特殊特权 [ALL](#all) 会将所有特权授予某个用户账户或角色。

默认情况下，用户账户或角色不具备任何特权。

如果用户或角色没有任何特权，则会显示为 [NONE](#none) 特权。

某些查询在实现上需要一组特权。例如，要执行 [RENAME](/zh/reference/statements/optimize) 查询，你需要以下特权：`SELECT`、`CREATE TABLE`、`INSERT` 和 `DROP TABLE`。

<div id="select">
  ### SELECT
</div>

允许执行 [SELECT](/zh/reference/statements/select) 查询。

特权级别：`COLUMN`。

**说明**

被授予此特权的用户可以对指定数据库中指定表的指定列执行 `SELECT` 查询。如果查询中包含了未指定的其他列，则不会返回任何数据。

请看下面这个特权：

```sql theme={null}
GRANT SELECT(x,y) ON db.table TO john
```

此特权允许 `john` 执行任何涉及 `db.table` 中 `x` 和/或 `y` 列数据的 `SELECT` 查询，例如 `SELECT x FROM db.table`。`john` 不能执行 `SELECT z FROM db.table`。`SELECT * FROM db.table` 同样不被允许。处理此查询时，ClickHouse 不会返回任何数据，包括 `x` 和 `y` 在内。唯一的例外是当表中只包含 `x` 和 `y` 列时，此时 ClickHouse 会返回所有数据。

<div id="insert">
  ### INSERT
</div>

允许执行 [INSERT](/zh/reference/statements/insert-into) 查询。

特权级别：`COLUMN`。

**描述**

被授予此特权的用户，可以对指定数据库和表中指定的一组列执行 `INSERT` 查询。如果用户包含了未指定的其他列，则查询不会插入任何数据。

**示例**

```sql theme={null}
GRANT INSERT(x,y) ON db.table TO john
```

已授予的特权允许 `john` 向 `db.table` 的 `x` 和/或 `y` 列中插入数据。

<div id="alter">
  ### ALTER
</div>

允许按照以下特权层级执行 [ALTER](/zh/reference/statements/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 CONSTRAINT` 和 `ALTER DROP CONSTRAINT` 特权。

**注意**

* `MODIFY SETTING` 特权允许修改表引擎设置。它不会影响其他设置或服务器配置参数。
* `ATTACH` 操作需要 [CREATE](#create) 特权。
* `DETACH` 操作需要 [DROP](#drop) 特权。
* 要通过 [KILL MUTATION](/zh/reference/statements/kill#kill-mutation) 查询停止变更，你需要拥有启动该变更所需的特权。例如，如果你想停止 `ALTER UPDATE` 查询，则需要 `ALTER UPDATE`、`ALTER TABLE` 或 `ALTER` 特权。

<div id="backup">
  ### BACKUP
</div>

允许在查询中执行 \[`BACKUP`]。有关 backups 的更多信息，请参阅["备份与恢复"](/zh/concepts/features/backup-restore/overview)。

<div id="create">
  ### CREATE
</div>

允许按照以下特权层级执行 [CREATE](/zh/reference/statements/create) 和 [ATTACH](/zh/reference/statements/attach) 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](#drop) 特权。

<div id="cluster">
  ### CLUSTER
</div>

允许执行 `ON CLUSTER` 查询。

```sql title="Syntax" theme={null}
GRANT CLUSTER ON *.* TO <username>
```

默认情况下，带有 `ON CLUSTER` 的查询要求用户拥有 `CLUSTER` 授权。
如果在未先授予 `CLUSTER` 特权的情况下尝试在查询中使用 `ON CLUSTER`，则会出现以下错误：

```text theme={null}
特权不足。要执行此查询，必须拥有 CLUSTER ON *.* 的授权。 
```

可以通过将 `config.xml` 中 `access_control_improvements` 部分里的 `on_cluster_queries_require_cluster_grant` 设置项 (见下文) 设为 `false` 来更改默认行为。

```yaml title="config.xml" theme={null}
<access_control_improvements>
    <on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
</access_control_improvements>
```

<div id="drop">
  ### DROP
</div>

允许按以下特权层级执行 [DROP](/zh/reference/statements/drop) 和 [DETACH](/zh/reference/statements/detach) 查询：

* `DROP`。级别：`GROUP`
  * `DROP DATABASE`。级别：`DATABASE`
  * `DROP TABLE`。级别：`TABLE`
  * `DROP VIEW`。级别：`VIEW`
  * `DROP DICTIONARY`。级别：`DICTIONARY`

<div id="truncate">
  ### TRUNCATE
</div>

允许执行 [TRUNCATE](/zh/reference/statements/truncate) 查询。

特权级别：`TABLE`。

<div id="optimize">
  ### OPTIMIZE
</div>

允许执行 [OPTIMIZE TABLE](/zh/reference/statements/optimize) 语句。

权限级别：`TABLE`。

<div id="show">
  ### SHOW
</div>

允许按照以下特权层级执行 `SHOW`、`DESCRIBE`、`USE` 和 `EXISTS` 查询：

* `SHOW`。级别：`GROUP`
  * `SHOW 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` 特权。

<div id="kill-query">
  ### KILL QUERY
</div>

允许按照以下特权层级执行 [KILL](/zh/reference/statements/kill#kill-query) 查询：

特权级别：`GLOBAL`。

**注意**

`KILL QUERY` 特权允许用户终止其他用户的查询。

<div id="access-management">
  ### 访问管理
</div>

允许用户执行管理用户、角色和行策略的查询。

* `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 POLICIES`、`SHOW CREATE ROW POLICY`、`SHOW CREATE POLICY`
    * `SHOW_QUOTAS`。级别：`GLOBAL`。别名：`SHOW CREATE QUOTA`
    * `SHOW_SETTINGS_PROFILES`。级别：`GLOBAL`。别名：`SHOW PROFILES`、`SHOW CREATE SETTINGS PROFILE`、`SHOW CREATE PROFILE`
  * `ALLOW SQL SECURITY NONE`。级别：`GLOBAL`。别名：`CREATE SQL SECURITY NONE`、`SQL SECURITY NONE`、`SECURITY NONE`

`ROLE ADMIN` 特权允许用户授予和撤销任何角色，包括未以 admin 选项授予该用户的角色。

<div id="system">
  ### SYSTEM
</div>

允许用户按照以下特权层级执行 [SYSTEM](/zh/reference/statements/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` 特权。

<div id="introspection">
  ### INTROSPECTION
</div>

允许使用[内部信息](/zh/concepts/features/performance/troubleshoot/sampling-query-profiler)相关函数。

* `INTROSPECTION`。级别：`GROUP`。别名：`INTROSPECTION FUNCTIONS`
  * `addressToLine`。级别：`GLOBAL`
  * `addressToLineWithInlines`。级别：`GLOBAL`
  * `addressToSymbol`。级别：`GLOBAL`
  * `demangle`。级别：`GLOBAL`

<div id="sources">
  ### SOURCES
</div>

允许使用外部数据源。适用于[表引擎](/zh/reference/engines/table-engines)和[表函数](/zh/reference/functions/table-functions)。

* `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`

<Note>
  从 25.7 版本开始，只有在启用服务器设置
  `access_control_improvements.enable_read_write_grants`
  时，才支持对数据源的 READ/WRITE 授权进行拆分。

  否则，应使用语法 `GRANT AZURE ON *.* TO user`，其等同于新的 `GRANT READ, WRITE ON AZURE TO user`
</Note>

示例：

* 要使用[MySQL 表引擎](/zh/reference/engines/table-engines/integrations/mysql)创建表，你需要 `CREATE TABLE (ON db.table_name)` 和 `MYSQL` 特权。
* 要使用[mysql 表函数](/zh/reference/functions/table-functions/mysql)，你需要 `CREATE TEMPORARY TABLE` 和 `MYSQL` 特权。

<div id="source-filter-grants">
  ### 源过滤器授权
</div>

<Note>
  此功能自 25.8 版本起可用，且仅在启用服务器设置
  `access_control_improvements.enable_read_write_grants`
  时可用
</Note>

你可以使用正则表达式过滤器，向特定源 URI 授予访问权限。这样可以更细粒度地控制用户能够访问哪些外部数据源。

**语法：**

```sql theme={null}
GRANT READ ON S3('regexp_pattern') TO user
```

此授权将仅允许用户从与指定正则表达式匹配的 S3 URI 中读取数据。

**示例：**

授予对特定 S3 bucket 路径的访问权限：

```sql theme={null}
-- 仅允许用户从 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
```

<Warning>
  source 过滤器将 **regexp** 用作参数，因此以下授权
  `GRANT READ ON URL('http://www.google.com') TO john;`

  会允许执行下面这些查询：

  ```sql theme={null}
  SELECT * FROM url('https://www.google.com');
  SELECT * FROM url('https://www-google.com');
  ```

  因为在正则表达式中，`.` 会被当作 `任意单个字符`。
  这可能会引入潜在漏洞。正确的授权应为

  ```sql theme={null}
  GRANT READ ON URL('https://www\.google\.com') TO john;
  ```
</Warning>

**使用 GRANT OPTION 进行再次授权：**

如果原始授权带有 `WITH GRANT OPTION`，则可以使用 `GRANT CURRENT GRANTS` 再次授权：

```sql theme={null}
-- 带有 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。

<div id="dictget">
  ### dictGet
</div>

* `dictGet`。别名：`dictHas`、`dictGetHierarchy`、`dictIsIn`

允许用户执行 [dictGet](/zh/reference/functions/regular-functions/ext-dict-functions#dictGet)、[dictHas](/zh/reference/functions/regular-functions/ext-dict-functions#dictHas)、[dictGetHierarchy](/zh/reference/functions/regular-functions/ext-dict-functions#dictGetHierarchy) 和 [dictIsIn](/zh/reference/functions/regular-functions/ext-dict-functions#dictIsIn) 函数。

权限级别：`DICTIONARY`。

**示例**

* `GRANT dictGet ON mydb.mydictionary TO john`
* `GRANT dictGet ON mydictionary TO john`

<div id="displaysecretsinshowandselect">
  ### displaySecretsInShowAndSelect
</div>

如果同时启用
[`display_secrets_in_show_and_select` 服务器设置](/zh/reference/settings/server-settings/settings#display_secrets_in_show_and_select)
和
[`format_display_secrets_in_show_and_select` 格式设置](/zh/reference/settings/formats#format_display_secrets_in_show_and_select)，
则允许用户在 `SHOW` 和 `SELECT` 查询中查看 secrets。

<div id="named-collection-admin">
  ### NAMED COLLECTION ADMIN
</div>

允许对指定的命名集合执行特定操作。在 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`

<div id="table-engine">
  ### 表引擎
</div>

允许在创建表时使用指定的表引擎。适用于[表引擎](/zh/reference/engines/table-engines)。

**示例**

* `GRANT TABLE ENGINE ON * TO john`
* `GRANT TABLE ENGINE ON TinyLog TO john`

<Note>
  默认情况下，出于向后兼容的考虑，使用特定表引擎创建表时会忽略授权检查；
  不过，你可以通过在 config.xml 中[将 `table_engines_require_grant` 设置为 true](https://github.com/ClickHouse/ClickHouse/blob/df970ed64eaf472de1e7af44c21ec95956607ebb/programs/server/config.xml#L853-L855)
  来更改这一行为。
</Note>

某些带有外部源的表引擎可能需要对相应源具有 `READ`/`WRITE` 权限。请参见 [Sources](#sources)。

例如，对于 AzureBlobStorage 表引擎，可能需要以下授权。

* `GRANT READ, WRITE ON AZURE TO john`

<div id="all">
  ### ALL
</div>

将受管实体上的所有特权授予某个用户账户或角色。

<Note>
  ClickHouse Cloud 不支持 `ALL` 特权，其中 `default` 用户的权限受限。用户可以通过授予 `default_role`，向某个用户授予最大权限。更多详情请参见[此处](/zh/products/cloud/guides/security/cloud-access-management/manage-cloud-users)。
  用户也可以使用 `GRANT CURRENT GRANTS`，并以 `default` 用户身份执行，以获得与 `ALL` 类似的效果。
</Note>

<div id="none">
  ### NONE
</div>

不授予任何特权。

<div id="admin-option">
  ### ADMIN OPTION
</div>

`ADMIN OPTION` 特权允许用户将自己的角色授予其他用户。
