---
title: "GRANT - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: GRANT 描述 该语句用于给指定的用户或角色授予相应的权限，或者将角色授予用户或角色。 使用限制及注意事项 不支持循环 GRANT 操作。例如，角色 A 授予角色 B，角色 B 授予角色 C，则角色 C 授予角色 A 会报错。 权限要求 将对象权限授予用户权限要求 执行 GRANT 语句时，当前用户必须拥有被授予的…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# GRANT

更新时间：2026-06-14 13:35:41

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/5500.grant-of-mysql-mode.md)  

## 描述

该语句用于给指定的用户或角色授予相应的权限，或者将角色授予用户或角色。

## 使用限制及注意事项

不支持循环 `GRANT` 操作。例如，角色 A 授予角色 B，角色 B 授予角色 C，则角色 C 授予角色 A 会报错。

## 权限要求

### 将对象权限授予用户权限要求

- 执行 `GRANT` 语句时，当前用户必须拥有被授予的权限。例如，想要使用用户 `user1` 为用户 `user2` 授予表 `tbl1` 的 `SELECT` 权限，则用户 `user1` 必须拥有表 `tbl1` 的 `SELECT` 权限。
 - 执行 `GRANT` 语句时，当前用户需拥有 `GRANT OPTION` 权限。关 OceanBase 数据库权限的详细介绍，请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685770)。

#### 说明

为用户授权后，该用户需重新连接 OceanBase 数据库，权限才能生效。

### 将角色授予用户或角色权限要求

- 当前用户具备 `SUPER` 权限时，可以 `GRANT` 所有角色。
 - 将角色授予其他用户或角色时，当前用户必须拥有被授予的角色，并且拥有 `ADMIN OPTION` 权限，才能授权成功。查看当前用户所拥有的权限的相关操作请参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685766)。

## 语法

### 将对象权限授予用户或角色

```sql
GRANT priv_type[(column_name_list)] [, priv_type[(column_name_list)] ...]
    ON [object_type] priv_level
    TO {user [, user...]}
    [WITH GRANT OPTION]

priv_type:
    ALTER
    | CREATE
    | CREATE USER
    | CREATE VIEW
    | DELETE
    | DROP
    | GRANT OPTION
    | INSERT
    | SELECT
    | UPDATE
    | INDEX
    | EXECUTE
    | SUPER
    | ALL [PRIVILEGES]
    | READ
    | WRITE
    | ...

column_name_list:
    column_name [, column_name ...]

object_type:
    TABLE
    | FUNCTION
    | PROCEDURE
    | CATALOG
    | LOCATION

user:
    user_or_role
    | user_name IDENTIFIED [WITH auth_plugin] BY password
    | user_name IDENTIFIED [WITH auth_plugin] BY PASSWORD password

user_or_role:
    user_name | role_name

```

### 将角色授予用户或角色

```sql
GRANT role_name [, role_name ...]
    TO user_or_role [, user_or_role ...]
    [WITH ADMIN OPTION];

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| priv_type | 指定授予的权限类型，可以授予多个权限，多个权限间使用英文逗号（`,`）隔开。具体的权限类型及其说明请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685770)。注意：PROXY 参数当前版本仅记录该关键字语法，功能不生效。 |
| column_name_list | 可选项，用于授予列级权限的列表，授予的权限仅作用于列出的列上。如果不指定，则权限适用于整个表或对象。详细介绍信息，参见 [直接授予权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685771)。 |
| object_type | 可选项，表示授权的对象类型（即权限应用的对象类型）。详细介绍可参见下文 [object_type](#object_type)。 |
| priv_level | 指定授予权限的层级。具有以下格式：   - 可以指定在所有数据库和所有表上生效（`*.*`）。 - 指定数据库或指定表生效（`db_name.*`，`*.table_name`） - 特定的数据库中特定的表生效（`db_name.table_name`） - 权限应用的对象类型是 Catalog 时，需指定外部数据目录的名称（`external_catalog_name`）。 |
| user | 指定要授予权限的用户，可以是一个或多个用户，多个用户间使用英文逗号（`,`）隔开。如果用户不存在，该语句会直接创建用户。 |
| auth_plugin | 用于指定用户身份验证的方式，目前仅支持 `mysql_native_password` 身份验证插件。 |
| BY password | 为待授权的用户指定一个密码，此处密码为明文，存入 `mysql.user` 表后，服务器端会变为密文存储下来。如果密码中包含特殊字符 ``~!@#%^&*_-+=`\|(){}[]:;',.?/``，需使用英文引号（`''` 或 `""`）包含。 |
| BY PASSWORD password | 为待授权的用户指定一个密码，此处密码为密文，将直接存入 `mysql.user` 表。 |
| WITH GRANT OPTION | 指定权限是否允许转授，取消授权时级联。 |
| role_name | 指定角色的名称。 |
| WITH ADMIN OPTION | 指定角色权限是否允许转授，取消授权时不级联。 |

### object_type

#### 注意

在使用 `object_type` 子句时，需要确保所指定的对象确实是对应的类型，否则将导致语法错误。

- `TABLE`：表示权限应用的对象类型是表。
 - `FUNCTION`：表示权限应用的对象类型是函数。
 - `PROCEDURE`：表示权限应用的对象类型是存储过程。
 - `CATALOG`：表示权限应用的对象类型是 Catalog。
 - `LOCATION`：表示权限应用的对象类型是 Location。可以授予用户 Location 对象的权限如下：

     - `READ`：表示 Location 对象的读权限。
     - `WRITE`：表示 Location 对象的写权限。  

  #### 说明

  对于 OceanBase 数据库 V4.4.x 版本，`GRANT` 语句从 V4.4.1 版本开始支持 `LOCATION` 参数及对应的 `READ` 和 `WRITE` 权限。

## 示例

### 示例一：授予对象权限

- 为已存在的用户 `developer_user` 赋予数据库 `sales_db` 的 `CREATE VIEW` 权限，并设置允许转授其他用户相同的权限。

  ```sql
  obclient> GRANT CREATE VIEW ON sales_db.* TO developer_user WITH GRANT OPTION;

  ```
 - 为已存在的用户 `admin_user` 赋予数据库 `sales_db` 的 `CREATE` 权限，并修改 `admin_user` 的密码。

  ```sql
  obclient> GRANT CREATE ON sales_db.* TO admin_user IDENTIFIED BY '********';

  ```

  执行后查看 `mysql.user` 表中 `admin_user` 用户的密码，会看到已更新为最新设置的密码。
 - 为不存在的用户 `report_user` 赋予数据库 `sales_db` 的 `CREATE` 权限，并为 `report_user` 设置密码。

  ```sql
  obclient> GRANT CREATE ON sales_db.* TO report_user IDENTIFIED BY '********';

  ```
 - 为已存在的用户 `analyst_user` 赋予数据库 `hr_db` 中的表 `employee_info` 列 `salary` 的 `SELECT` 权限。

  ```sql
  obclient> GRANT SELECT(salary) ON hr_db.employee_info TO analyst_user;

  ```
 - 授予用户 `data_admin` 对全局级别的 `CREATE CATALOG` 和 `USE CATALOG` 权限。

  ```sql
  obclient> GRANT CREATE CATALOG, USE CATALOG ON *.* TO data_admin WITH GRANT OPTION;

  ```

### 示例二：使用 object_type 授予权限

- 授予 `query_user` 对 `sales_db` 数据库下表 `orders` 的 `SELECT` 权限。

  ```sql
  obclient> GRANT SELECT ON TABLE sales_db.orders TO query_user;

  ```
 - 授予 `developer_user` 对 `hr_db` 数据库下函数 `calculate_bonus` 的执行权限。

  ```sql
  obclient> GRANT EXECUTE ON FUNCTION hr_db.calculate_bonus TO developer_user;

  ```
 - 授予 `dba_user` 对 `hr_db` 数据库下存储过程 `update_employee_info` 的执行权限。

  ```sql
  obclient> GRANT EXECUTE ON PROCEDURE hr_db.update_employee_info TO dba_user;

  ```
 - 授予 `data_engineer` 对 Catalog 对象 `external_data_catalog` 的 `SELECT` 和 `USE CATALOG` 权限。

  ```sql
  obclient> GRANT SELECT, USE CATALOG ON CATALOG external_data_catalog TO data_engineer WITH GRANT OPTION;

  ```
 - 授予 `etl_user` 对 Location 对象 `oss_data_location` 的读取权限。

  ```sql
  obclient> GRANT READ ON LOCATION oss_data_location TO etl_user WITH GRANT OPTION;

  ```

### 示例三：将角色授予用户或角色

- 将角色 `app_admin_role` 的权限授予角色 `department_admin_role`，并且允许转授。

  ```sql
  obclient> GRANT app_admin_role TO department_admin_role WITH ADMIN OPTION;

  ```
 - 将角色 `read_only_role` 的权限授予用户 `analyst_user`，并且允许转授。

  ```sql
  obclient> GRANT read_only_role TO analyst_user WITH ADMIN OPTION;

  ```

## 相关文档

- 授予用户权限的操作可参见 [授予权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685771)。
 - 查看用户权限的操作可参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685766)。
 - 可从 `mysql.user` 表中查看创建的用户信息，`mysql.user` 表的详细介绍可参见 [mysql.user](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684628)。
 - [向角色中添加权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686999)
 - [将角色授予用户或角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687005)
 - [激活角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687000)
 - [间接授权](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685767)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
