本文主要介绍 OceanBase 数据库 MySQL 模式中,GRANT ALL 语句会为用户授予哪些权限。
MySQL 模式的权限
OceanBase 数据库 MySQL 模式下创建的用户可以分为两类:
业务系统的用户:一般会在业务库中执行分析或查询操作。
通过指定业务库的方式授予权限,则会授予用户业务系统权限。
obclient> GRANT ALL ON <database_name> .* TO <user_name>对于普通用户,
GRANT ALL会授予以下权限。权限类别 功能 对象权限 select_priv 对象权限 insert_priv 对象权限 update_priv 对象权限 delete_priv 对象权限 create_priv 对象权限 drop_priv 对象权限 index_priv 对象权限 alter_priv 对象权限 create_view_priv 对象权限 show_view_priv 管理员用户:会涉及到 mysql、information_schema 等系统库的统计、分析等操作。
不指定业务库则会授予用户级的权限。
obclient> GRANT ALL ON *.* TO <user_name>对于管理员用户,
GRANT ALL会授予以下权限。权限类别 功能 描述 OceanBase 数据库支持的版本 对象权限 select_priv 确定用户是否可以通过 SELECT命令选择数据。V1.4.71 及以上版本 对象权限 insert_priv 确定用户是否可以通过 INSERT命令插入数据。V1.4.71 及以上版本 对象权限 update_priv 确定用户是否可以通过 UPDATE命令修改现有数据。V1.4.71 及以上版本 对象权限 delete_priv 确定用户是否可以通过 DELETE命令删除现有数据。V1.4.71 及以上版本 对象权限 create_priv 确定用户是否可以创建新的数据库和表。 V1.4.71 及以上版本 对象权限 drop_priv 确定用户是否可以删除现有数据库和表。 V1.4.71 及以上版本 对象权限 process_priv 确定用户是否可以通过 SHOW PROCESSLIST命令查看其他用户的进程。V1.4.71 及以上版本 对象权限 file_priv 确定用户是否可以执行 SELECT INTO OUTFILE和LOAD DATA INFILE命令。V1.4.71 及以上版本 对象权限 grant_priv 确定用户是否可以将已经授予给自己的权限再授予其他用户。 V1.4.71 及以上版本 对象权限 index_priv 确定用户是否可以创建和删除表索引。 V1.4.71 及以上版本 对象权限 alter_priv 确定用户是否可以重命名和修改表结构。 V1.4.71 及以上版本 对象权限 show_db_priv 确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。 V1.4.71 及以上版本 对象权限 super_priv 确定用户是否可以执行某些强大的管理功能,例如通过 KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL 变量,执行关于复制和日志的各种命令。V1.4.71 及以上版本 对象权限 create_view_priv 确定用户是否可以创建视图。 V1.4.71 及以上版本 对象权限 show_view_priv 确定用户是否可以查看视图或了解视图如何执行。 V1.4.71 及以上版本 对象权限 create_user_priv 确定用户是否可以执行 CREATE USER命令,这个命令用于创建新的 MySQL 账号。V1.4.71 及以上版本 对象权限 create_synonym_priv 确定用户是否可以创建同义词和公共同义词 V1.4.71 及以上版本 对象权限(集群级别) ALTER TENANT 修改租户信息的权限。 V1.4.71 及以上版本 对象权限(集群级别) ALTER SYSTEM 执行 ALTER SYSTEM命令的权限。V1.4.71 及以上版本 对象权限(集群级别) CREATE RESOURCE POOL 创建、修改和删除资源池的权限。 V2.2.60 及以上版本 对象权限(集群级别) CREATE RESOURCE UNIT 创建、修改和删除资源单元的权限。 V2.2.60 及以上版本 注意
假设有两个用户 u1 与 u2,如果 u1 具有 GRANT OPTION,并执行 GRANT ALL 将权限授予 u2。则会将 u1 的所有权限授予 u2。如果 u1 不具有 GRANT OPTION 则权限不允许转授。
查看业务用户权限
如果使用 GRANT ALL 语句为用户授予权限,使用 SHOW GRANTS 语句查询时只会返回 GRANT ALL,不会显示用户具体拥有哪些权限,所以无法通过 SHOW GRANTS语句来查询 GRANT ALL 包含的权限。但是您可以通过撤销 SELECT 权限然后查看用户剩余的权限的方式获知 GRANT ALL 包含的权限。
使用 root 用户登录 OceanBase 数据库的业务租户。
[admin@hostname ~]$ obclient -hx.x.x.x -Pxxxx -uroot@MySQL#cluster -p创建测试用户 obtest,并为其授予业务数据库 test 的权限。
obclient> CREATE USER obtest IDENTIFIED BY 'obtest'; Query OK, 0 rows affected (0.03 sec) obclient> GRANT ALL ON test.* TO obtest; Query OK, 0 rows affected (0.02 sec)回收 obtest 用户的 SELECT 权限,查看 obtest 用户剩余的权限。
obclient> REVOKE SELECT ON test.* FROM obtest; Query OK, 0 rows affected (0.02 sec) obclient> SHOW GRANTS FOR obtest; +----------------------------------------------------------------------------------------------------------+ | Grants for obtest@% | +----------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'obtest' | | GRANT ALTER, CREATE, DELETE, DROP, INSERT, UPDATE, INDEX, CREATE VIEW, SHOW VIEW ON `test`.* TO 'obtest' | +----------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)可见业务用户的权限为 SELECT、ALTER、CREATE、DELETE、DROP、INSERT、UPDATE、INDEX、CREATE VIEW 和 SHOW VIEW。
查看管理员用户权限
如果使用 GRANT ALL 语句为用户授予权限,使用 SHOW GRANTS 语句只会返回 GRANT ALL,不会显示用户具体拥有哪些权限,所以无法通过 SHOW GRANTS语句来查询 GRANT ALL 包含的权限。但是您可以通过撤销 SELECT 权限然后查看用户剩余的权限的方式获知 GRANT ALL 包含的权限。
使用管理员用户 root 登录 OceanBase 数据库的业务租户。
[admin@hostname ~]$ obclient -hx.x.x.x -Pxxxx -uroot@MySQL#cluster -p创建测试用户 obtest,并为其授予管理员权限。
obclient> CREATE USER obtest IDENTIFIED BY 'obtest'; Query OK, 0 rows affected (0.03 sec) obclient> GRANT ALL ON *.* TO obtest; Query OK, 0 rows affected (0.02 sec)回收 obtest 用户的 SELECT 权限,查看 obtest 用户剩余的权限。
obclient> REVOKE SELECT ON *.* FROM obtest; Query OK, 0 rows affected (0.02 sec) obclient> SHOW GRANTS FOR obtest; +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for obtest@% | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALTER, CREATE, CREATE USER, DELETE, DROP, INSERT, UPDATE, INDEX, CREATE VIEW, SHOW VIEW, SHOW DATABASES, SUPER, PROCESS, CREATE_SYNONYM, FILE, ALTER TENANT, ALTER SYSTEM, CREATE RESOURCE POOL, CREATE RESOURCE UNIT ON *.* TO 'obtest' | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)可见管理员用户的权限为 SELECT、ALTER、CREATE、CREATE USER、DELETE、DROP、INSERT、UPDATE、INDEX、CREATE VIEW、SHOW VIEW、SHOW DATABASES、SUPER、PROCESS, CREATE SYNONYM、FILE、ALTER TENANT、ALTER SYSTEM、CREATE RESOURCE POOL 和CREATE RESOURCE UNIT。