Files
oceanbase/docs/docs-cn/10.sql-reference/5.sql-statement/40.GRANT.md
2022-02-10 14:51:49 +08:00

7.0 KiB

GRANT

描述

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

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

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

格式

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 赋予所有权限。
OceanBase(admin@TEST)>GRANT ALL PRIVILEGES ON *.* TO obsqluser01 with grant option;
Query OK, 0 rows affected (0.03 sec)