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