---
title: "直接授予权限 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 直接授予权限 您可以通过 GRANT 语句直接授予用户权限。 前提条件 当前用户必须拥有被授予的权限（例如， test1 把表 t1 的 SELECT 权限授予 test2 ，则 test1 必须拥有表 t1 的 SELECT 的权限），并且拥有 GRANT OPTION 权限，才能授予成功。 查看当前拥有权限的操作…
---
切换语言

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

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

# 直接授予权限

更新时间：2026-03-28 16:48:26

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/600.manage/500.security-and-permissions/300.access-control/200.user-and-permission/200.permission-of-mysql-mode/200.authority-of-mysql-mode.md)  

您可以通过 `GRANT` 语句直接授予用户权限。

## 前提条件

当前用户必须拥有被授予的权限（例如，`test1` 把表 `t1` 的 `SELECT` 权限授予 `test2`，则 `test1` 必须拥有表 `t1` 的 `SELECT` 的权限），并且拥有 `GRANT OPTION`权限，才能授予成功。

查看当前拥有权限的操作请参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479237)。

### 注意事项

进行授权前，需要注意以下事项：

- 给特定用户授予权限时，如果用户不存在，可以直接创建用户。如果 `sql_mode='no_auto_create_user'`，且语句中没有 `IDENTIFIED BY` 指定密码时，不可以直接创建用户。
 - 同时把多个权限赋予用户时，权限类型用英文逗号（,）分隔。
 - 同时给多个用户授权时，用户名用英文逗号（,）分隔。
 - 用户被授权后，该用户只有重新连接 OceanBase 数据库，权限才能生效。
 - 由于目前没有 `CHANGE EFFECTIVE TENANT` 的权限控制，故 `sys` 租户下的用户都可以进行授权。

### 授予权限的语法

授予权限的语法如下：

```sql
GRANT priv_type
    ON priv_level
    TO user_specification [, user_specification]...
     [WITH GRANT OPTION];

priv_level:
      *
    | *.*
    | database_name.*
    | database_name.table_name
    | table_name
    | database_name.routine_name

user_specification:
user_name [IDENTIFIED BY [PASSWORD] 'password']

```

语句使用说明：

- `priv_type`：指定授予的权限类型。同时将多个权限授予用户时，权限类型之间使用英文逗号（,）分隔。

  如果需要授予列级权限，则需要在对应的权限类型后指定列名（格式为 `priv(col_list)`），支持同时指定多列，列名之间使用英文逗号间隔。例如，授予 `c1` 列的 `SELECT` 权限，则表示为 `SELECT（c1）`。

  在为表选择列进行授权时：

     - 如果需要对某些列执行 `UPDATE` 语句，则需要授予用户这些列的 `UPDATE` 权限，以及其他要访问的列的 `SELECT` 权限。

      例如，对于以下语句：

      ```shell
      obclient> UPDATE tb1 SET c1=c3, c2=1+3 WHERE c4=1;

      ```

      由于需要更新的列是 `c1` 和 `c2`，则需要对用户授予 `c1` 和 `c2` 列的 `UPDATE` 权限；同时又需要访问 `c3` 和 `c4` 列，故还需要对用户授予 `c3` 和 `c4` 列的 `SELECT` 权限。
     - 如果需要对某些列执行 `INSERT` 语句或 `REPLACE` 语句，则需要授予用户插入数据的这些列的 `INSERT` 权限，以及其他要访问的列的 `SELECT` 权限。
     - 对于其他语句，需要访问哪些列就授予用户哪些列的 `SELECT` 权限即可。

  有关 MySQL 模式支持的所有权限类型，请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479241)。
 - `priv_level`：指定授予权限的层级。MySQL 模式中，权限主要分为以下层级：

     - 全局：适用于所有的数据库。使用 `GRANT ... ON *.*` 授予全局权限。
     - 数据库层级：适用于指定一个数据库中的所有目标。使用 `GRANT ... ON db_name.*` 授予数据库级权限。
     - 表层级：适用于指定一个表中的所有列。使用 `GRANT ... ON database_name.table_name` 授予表级权限。

      授予列权限时，也使用 `GRANT ... ON database_name.table_name` 来表示指定的表。
 - `user_specification`：指定待授予权限的用户。如果用户不存在，则直接创建用户。

  同时授权给多个用户时，用户名之间使用英文逗号（,）分隔。
 - `user_name IDENTIFIED BY 'password'`与 `user_name IDENTIFIED BY PASSWORD 'password'`：`user_name IDENTIFIED BY 'password'` 子句中的密码为明文；`user_name IDENTIFIED BY PASSWORD 'password'` 子句中的密码为密文。
 - `WITH GRANT OPTION`：指定权限是否允许转授或撤销。

### 操作示例

- 授予全局权限

  该权限适用于所有数据库。通常使用 `GRANT ... ON *.*` 授予全局权限。

     - 将所有数据库的所有对象的权限授予用户 `test`。

      ```shell
      obclient> GRANT ALL ON *.* TO test;

      ```
     - 将所有数据库中所有表的 `INSERT` 、`SELECT` 权限授予用户 `test`。

      ```shell
      obclient> GRANT SELECT, INSERT ON *.* TO test;

      ```
 - 授予数据库级权限

  数据库级权限是指某个指定的数据库中所有对象的操作权限。通常使用 `GRANT ... ON db_name.*` 授予数据库级权限。

     - 将数据库 `db1` 的所有对象的操作权限授予用户 `test`。

      ```shell
      obclient> GRANT ALL ON db1.* TO test;

      ```
     - 将数据库 `db1` 的所有表的 `INSERT` 、`SELECT` 权限授予用户 `test`。

      ```shell
      obclient> GRANT SELECT, INSERT ON db1.* TO test;

      ```
 - 授予表级权限

  对象权限是指某个指定的数据库中的指定表的操作权限。通常使用 `GRANT ... ON db_name.tb1_name` 授予对象权限。

     - 将数据库 `db1` 的表 `tb1_name` 的 `INSERT` 、`SELECT` 权限授予用户 `test`。

      ```shell
      obclient> GRANT SELECT, INSERT ON db1.tb1_name TO test;

      ```
     - 将数据库 `db1` 的表 `tb1_name` 的操作权限授予用户 `test`。

      ```shell
      obclient> GRANT ALL ON db1.tb1_name TO test;

      ```
 - 授予表中的列权限

  列权限是指对某个指定表的指定列的操作权限。

  以下示例中，将数据库 `db1` 下表 `tb1_name` 的 `c1` 列的 `SELECT` 权限以及 `c1` 和 `c2` 列的 `INSERT` 权限授予用户 `test`。

  ```shell
  obclient> GRANT SELECT(c1), INSERT (c1, c2) ON db1.tb1_name TO test;

  ```

更多 `GRANT` 语句的信息请参见 [GRANT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479544)。

 上一篇 下一篇 ![有帮助](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) 咨询热线
