GRANT 
==========================



描述 
-----------

该语句用于系统管理员授予 User 某些权限。
**说明**



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

  

* 用户授权后，该用户只有重新连接OceanBase，权限才能生效。

  




格式 
-----------

```javascript
GRANT priv_type 
    ON priv_level 
    TO user_specification [, user_specification]... 
     [WITH with_option ...]

privilege_type:
      ALTER
    | CREATE
    | CREATE USER
    | CREATE VIEW
    | DELETE
    | DROP
    | GRANT OPTION
    | INDEX
    | INSERT
    | PROCESS
    | SELECT
    | SHOW DATABASES
    | SHOW VIEW
    | SUPER
    | UPDATE
    | USAGE
    | CREATE SYNONYM
    
priv_level: 
     *
    | *.*
    | db_name.* 
    | db_name.tbl_name
    | tbl_name
    | db_name.routine_name

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

with_option:
 GRANT OPTION
```



参数解释 
-------------



|                 **参数**                 |                                                                                                                                                                                        **描述**                                                                                                                                                                                         |
|----------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| priv_type                              | 指定授予的权限类型。具体的权限类型及其说明请参见下方权限类型说明表。 同时把多个权限赋予用户时，权限类型用","隔开。                                                                                                                                                                                                                                                                                                           |
| priv_level                             | 指定授予权限的层级。权限可以分为以下几个层级： * 全局层级：适用于所有的数据库。使用 GRANT ALL ON \*.\*授予全局权限。   * 数据库层级：适用于一个给定数据库中的所有目标。使用 GRANT ALL ON db_name.\* 授予数据库权限。   * 表层级：表权限适用于一个给定表中的所有列。使用 GRANT ALL ON db_name.tbl_name 授予表权限。    用"\*"代替table_name，表示赋予全局权限，即对数据库中的所有表赋权。 |
| user_specification                     | 给特定用户授予权限。如果用户不存在，可以直接创建用户。 sql_mode='no_auto_create_user'，同时没有identified by 指定密码时，不可以直接创建用户。  同时给多个用户授权时，用户名用","隔开。                                                                                                                                                                                                                                  |
| user IDENTIFIED BY 'password'          | 此处密码为明文。                                                                                                                                                                                                                                                                                                                                                                              |
| user IDENTIFIED BY PASSWORD 'password' | 此处密码为密文。                                                                                                                                                                                                                                                                                                                                                                              |
| with_option                            | 指定权限是否允许转授                                                                                                                                                                                                                                                                                                                                                                            |



可以授予的权限类型如下表所示。

**权限类型说明表** 


|      **权限**       |                             **说明**                              |
|-------------------|-----------------------------------------------------------------|
| ALL PRIVILEGES    | 除GRANT OPTION以外所有权限。                                            |
| ALTER             | ALTER TABLE的权限。                                                 |
| CREATE            | CREATE TABLE的权限。                                                |
| CREATE USER       | CREATE USER，DROP   USER，RENAME USER和REVOKE ALL   PRIVILEGES的权限。 |
| CREATE TABLEGROUP | 全局CREATE TABLEGROUP的权限。                                         |
| DELETE            | DELETE的权限。                                                      |
| DROP              | DROP的权限。                                                        |
| GRANT OPTION      | GRANT OPTION的权限。                                                |
| INSERT            | INSERT的权限。                                                      |
| SELECT            | SELECT的权限。                                                      |
| UPDATE            | UPDATE的权限。                                                      |
| SUPER             | SET GLOBAL修改全局系统参数的权限。                                          |
| SHOW DATABASES    | 全局 SHOW DATABASES的权限。                                           |
| INDEX             | CREATE INDEX, DROP INDEX的权限                                     |
| CREATE VIEW       | 创建、删除视图的权限。                                                     |
| SHOW VIEW         | SHOW CREATE VIEW权限。                                             |
| CREATE SYNONYM    | 创建同义词的权限。                                                       |




**说明**



目前没有 change effective tenant 的权限控制，故 sys 租户下的用户都可以进行授权。

示例 
-----------

* 执行以下命令给用户 obsqluser01 赋予所有权限。




```javascript
OceanBase(admin@TEST)>GRANT ALL PRIVILEGES ON *.* TO obsqluser01 with grant option;
Query OK, 0 rows affected (0.03 sec)
```







