用户创建成功后,您可以根据需要查看用户的权限。
管理员登录数据库的 MySQL 租户。
通过以下方式查看用户权限:
通过
SHOW GRANTS 语句查看某个用户被授予的权限。
示例如下:
obclient> SHOW GRANTS FOR test; +----------------------------------------+ | Grants for test@% | +----------------------------------------+ | GRANT INSERT, SELECT ON *.* TO 'test' | | GRANT SELECT ON `db1`.* TO 'test' | +----------------------------------------+ 2 rows in set
查看用户所拥有的用户级权限。
管理员可以通过
mysql.user 视图查看某个用户所拥有的用户级权限。普通用户可以通过
mysql.user 视图查看自己所拥有的用户级权限。
示例如下:
obclient> SELECT * FROM mysql.user WHERE user='test'\G; *************************** 1. row *************************** host: % user: test password: *6691484ea6b50ddde1926a220da01fa9e575c18a select_priv: Y insert_priv: Y update_priv: N delete_priv: N create_priv: N drop_priv: N reload_priv: N shutdown_priv: N process_priv: N file_priv: N grant_priv: N reference_priv: N index_priv: N alter_priv: N show_db_priv: N super_priv: N create_tmp_table_priv: N lock_tables_priv: N execute_priv: N repl_slave_priv: N repl_client_priv: N create_view_priv: N show_view_priv: N create_routine_priv: N alter_routine_priv: N create_user_priv: N event_priv: N trigger_priv: N create_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: ob_native_password authentication_string: password_expired: 1 row in set
更多
mysql.user 视图的字段及说明请参见
mysql.user。
查看用户所拥有的数据库级权限。
管理员可以通过
mysql.db 视图查看某个用户所拥有的数据库级权限。普通用户可以通过
mysql.db 视图查看自己所拥有的数据库级权限。
obclient> SELECT * FROM mysql.db WHERE user='test'\G; *************************** 1. row *************************** host: % db: test user: test select_priv: Y insert_priv: Y update_priv: Y delete_priv: N create_priv: N drop_priv: N grant_priv: N reference_priv: N index_priv: Y alter_priv: Y create_tmp_table_priv: N lock_tables_priv: N create_view_priv: N show_view_priv: Y create_routine_priv: N alter_routine_priv: N execute_priv: N event_priv: N trigger_priv: N 1 row in set
更多
mysql.db 视图的字段及说明请参见
mysql.db。
修改用户权限包括授予用户权限和撤销用户权限。
您可以通过
GRANT 语句授予用户用户级权限、数据库级权限或对象权限。
当前用户必须拥有被授予的权限(例如,
test1 把表
t1 的
SELECT 权限授予
test2,则
test1 必须拥有表
t1 的
SELECT 的权限),并且拥有
GRANT OPTION权限,才能授予成功。
查看当前拥有权限的操作请参见 查看用户权限。
进行授权前,需要注意以下事项:
给特定用户授予权限时,如果用户不存在,可以直接创建用户。如果
sql_mode='no_auto_create_user',且语句中没有
IDENTIFIED BY 指定密码时,不可以直接创建用户。
同时把多个权限赋予用户时,权限类型用英文逗号(,)分隔。
同时给多个用户授权时,用户名用英文逗号(,)分隔。
用户被授权后,该用户只有重新连接 OceanBase 数据库,权限才能生效。
由于目前没有
CHANGE EFFECTIVE TENANT 的权限控制,故
sys 租户下的用户都可以进行授权。
授予权限的语法如下:
GRANT priv_type ON priv_level TO user_specification [, user_specification]... [WITH GRANT 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: * | *.* | database_name.* | database_name.table_name | table_name | database_name.rountine_name user_specification: user_name [IDENTIFIED BY [PASSWORD] 'password']
语句使用说明:
priv_type:指定授予的权限类型。同时将多个权限授予用户时,权限类型之间使用英文逗号(,)分隔。
priv_level:指定授予权限的层级。MySQL 模式中,权限主要分为以下层级:
用户层级:适用于所有的数据库。使用
GRANT ... ON *.* 授予用户级权限。
数据库层级:适用于指定一个数据库中的所有目标。使用
GRANT ... ON db_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。
obclient> GRANT ALL ON *.* TO test;
将所有数据库中所有表的
INSERT 、
SELECT 权限授予用户
test。
obclient> GRANT SELECT, INSERT ON *.* TO test;
授予数据库级权限
数据库级权限是指某个指定的数据库中所有对象的操作权限。通常使用
GRANT ... ON db_name.* 授予数据库级权限。
将数据库
db1 的所有对象的操作权限授予用户
test。
obclient> GRANT ALL ON db1.* TO test;
将数据库
db1 的所有表的
INSERT 、
SELECT 权限授予用户
test。
obclient> GRANT SELECT, INSERT ON db1.* TO test;
授予表级权限
对象权限是指某个指定的数据库中的指定表的操作权限。通常使用
GRANT ... ON db_name.tb1_name 授予对象权限。
将数据库
db1 的表
tb1_name 的
INSERT 、
SELECT 权限授予用户
test。
obclient> GRANT SELECT, INSERT ON db1.tb1_name TO test;
将数据库
db1 的表
tb1_name 的操作权限授予用户
test。
obclient> GRANT ALL ON db1.tb1_name TO test;
更多
GRANT 语句的信息请参见
GRANT。
当前用户必须拥有被撤销的权限(例如,
test1 要撤销
test2 对表
t1 的
SELECT 权限,则
test1 必须拥有表
t1 的
SELECT权限),并且拥有
GRANT OPTION 权限。
撤销
ALL PRIVILEGES 和
GRANT OPTION 权限时,当前用户必须拥有全局
GRANT OPTION 权限,或者对权限表的
UPDATE 及
DELETE 权限。
同时对某个用户撤销多个权限时,权限类型用英文逗号(,)隔开。
同时撤销多个用户的授权时,用户名用英文逗号(,)隔开。
撤销操作不会级联。例如,用户
test1 给
test2 授予了某些权限,撤回
test1 的权限不会同时也撤回
test2 的相应权限。
撤销权限的语法如下:
REVOKE priv_type ON priv_level FROM 'user_name'; priv_type: ALTER | CREATE | CREATE USER | CREATE VIEW | DELETE | DROP | GRANT OPTION | INDEX | INSERT | PROCESS | SELECT | SHOW DATABASES | SHOW VIEW | SUPER | UPDATE | USAGE priv_level: * | *.* | database_name.* | database_name.table_name | table_name | database_name.rountine_name
语句使用说明:
priv_type:指定撤销的权限类型。同时撤销用户的多个权限时,权限类型之间使用英文逗号(,)分隔。
priv_level:指定撤销的权限层级。主要分为以下层级:
用户层级:适用于所有的数据库。使用
REVOKE ... ON *.* 撤销用户级权限。
数据库层级:适用于一个指定数据库中的所有目标。使用
REVOKE ... ON db_name.* 撤销数据库级权限。
表层级:适用于一个指定表中的所有列。使用
REVOKE ... ON database_name.table_name 撤销表级权限。
user_name:指定待撤销权限的用户,同时撤销多个用户的权限时,用户名之间使用英文逗号(,)分隔。
撤销用户级权限
撤销用户
test 操作所有数据库中所有表的
INSERT 、
SELECT 权限。
obclient> REVOKE SELECT, INSERT ON *.* FROM 'test';
撤销数据库级权限
撤销用户
test 操作数据库
db1 的所有表的
INSERT 、
SELECT 权限。
obclient> REVOKE SELECT, INSERT ON db1 FROM 'test';
撤销表级权限
撤销用户
test 操作数据库
db1 的表
tb1_name 的
INSERT 、
SELECT 权限。
obclient> REVOKE SELECT, INSERT ON db1.tb1_name FROM 'test';
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932814/ ,如需转载,请注明出处,否则将追究法律责任。