首页 > 数据库 >hhdb数据库介绍(9-16)

hhdb数据库介绍(9-16)

时间:2024-11-29 11:13:17浏览次数:8  
标签:name 角色 16 数据库 用户 支持 role01 hhdb 权限

SQL语法支持

事务管理与锁语句

语句类型 事务语句 语句参数 状态 说明
事务管理 START TRANSACTION 无参数 支持
WITH CONSISTENT SNAPSHOT 支持
READ WRITE 支持
READ ONLY 支持
BEGIN 支持
COMMIT 支持
COMMIT [AND [NO] CHAIN] [[NO] RELEASE] 支持
ROLLBACK 支持
ROLLBACK [AND [NO] CHAIN] [[NO] RELEASE] 支持
SET autocommit 0 1 支持
SAVEPOINT SAVEPOINT 支持
ROLLBACK ... TO ... 支持
RELEASE SAVEPOINT 支持
LOCK LOCK TABLES READ [LOCAL] 禁用
[LOW_PRIORITY] WRITE 禁用
UNLOCK TABLES 禁用
LOCK INSTANCE FOR BACKUP 禁用
UNLOCK INSTANCE 禁用
事务隔离级别语句 SET SESSION TRANSACTION REPEATABLE READ 支持 XA模式可完整支持, 普通模式下会存在读到部分提交的情况
READ COMMITTED 支持 普通模式下会存在读写不一致的问题; XA模式下支持,但跨库多次查询的情况下不保证读写强一致;即:对select 、insert select 这类SQL,如果出现一个SQL转成多个SQL执行的SQL语句,则SQL执行结果在该隔离级别下可能不正确。可参考数据强一致性(XA事务)章节章节描述
READ UNCOMMITTED 不支持
SERIALIZABLE 支持 XA模式可完整支持, 普通模式下会存在读到部分提交的情况
SET GLOBAL TRANSACTION REPEATABLE READ 不支持 不支持SET GLOBAL的方式,只支持SET SESSION
READ COMMITTED 不支持 不支持SET GLOBAL的方式,只支持SET SESSION
READ UNCOMMITTED 不支持
SERIALIZABLE 不支持
SET SESSION TRANSACTION READ ONLY 支持
READ WRITE 支持
SET GLOBAL TRANSACTION READ ONLY 不支持
READ WRITE 不支持
A事务 XA START BEGIN ... [JOIN RESUME]
XA END [SUSPEND [FOR MIGRATE]] 禁用
XA PREPARE 禁用
XA COMMIT [ONE PHASE] 禁用
XA ROLLBACK 禁用
XA RECOVER 禁用
XA RECOVER [CONVERT XID] 禁用 5.7新增参数

其他语句

存储过程、自定义函数等语句

计算节点当前仅支持垂直库(即逻辑库仅关联一个数据节点)场景下使用存储过程,自定义函数等语句。

语句类型 SQL语句 支持状态 说明
存储过程 BEGIN ... END ... 限制支持 垂直库下可使用,下同
DECLARE 限制支持
CASE 限制支持
IF 限制支持
ITRATE 限制支持
LEAVE 限制支持
LOOP 限制支持
REPEAT 限制支持
RETURN 限制支持
WHILE 限制支持
CURSOR 限制支持
DECLARE ... CONDITION... 限制支持
DECLARE ... HANDLER ... 限制支持
GET DIAGNOSTICS 限制支持
RESIGNAL 限制支持
SIGNAL 限制支持
插件和UDF语句 CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING |INTEGER|REAL| DECIMAL} SONAME shared_library_name 限制支持
DROP FUNCTION 限制支持
INSTALL PLUGIN 禁用
UNINSTALL PLUGIN 禁用

Prepare SQL Statement

语句类型 SQL语句 支持状态 说明
Prepare SQL Statement PREPARE ... FROM ... 支持
EXECUTE ... 支持
{DEALLOCATE | DROP} PREPARE 支持

用户管理语句

HHDB Server实现了一套自己的用户名与权限管理的系统,可以优先在关系集群数据库可视化管理平台页面上操作即可。若使用数据库用户管理类的SQL语句,部分可以支持。

语句类型 SQL语句 支持状态 说明
用户管理语句 ALTER USER 禁用 通过平台操作可支持
CREATE USER 支持 使用说明详见表格下方详细描述
DROP USER 支持 使用说明详见表格下方详细描述
GRANT 支持 使用说明详见表格下方详细描述
RENAME USER 禁用 通过平台操作可支持
REVOKE 支持 使用说明详见表格下方详细描述
SET PASSWORD 禁用 通过平台操作可支持

支持使用SQL语句创建/删除用户,并给用户赋权/解权。

创建用户

创建用户语法:

CREATE USER [IF NOT EXISTS] 'user_name'@'host_name'   IDENTIFIED BY  'password_auth_string'[,'user_name'@'host_name'   IDENTIFIED BY  'password_auth_string']...

服务端创建用户语法示例:

create user 'jingjingjing'@'%' identified by 'jing' with max_user_connections 3;

创建用户时执行用户必须具有super权限且不支持空密码创建,用户名最大长度限制64字符,密码暂未限制。

  • 执行用户不具有super权限创建用户,提示如下:

在这里插入图片描述

  • 空密码创建时,提示如下:

在这里插入图片描述

  • 用户名超过限制,提示如下:

在这里插入图片描述

  • 重复创建用户,提示如下:

在这里插入图片描述

删除用户

删除用户语法:

DROP USER [IF EXISTS] 'user_name'@'host_name' [,'user_name'@'host_name']...

服务端删除用户语法示例:

drop user 'jingjingjing'@'%';

删除用户时执行用户必须具有super权限。

  • 执行用户不具有super权限删除用户,提示如下:

在这里插入图片描述

  • 删除不存在的用户时,提示如下:

在这里插入图片描述

GRANT赋权

GRANT赋权语法:

GRANT
priv_type[, priv_type] ...
ON priv_level TO 'user_name'@'host_name'[,'user_name'@'host_name'] ...
[WITH MAX_USER_CONNECTIONS con_num]

提示
可授权的权限类型priv_type 包括:SELECT、 UPDATE、 DELETE、 INSERT 、CREATE 、DROP
、ALTER 、FILE 、 SUPER

可使用ALL [PRIVILEGES] 为用户赋予所有权限(包括SUPER权限)在内。

可授权的权限范围priv_level包括: * | . | db_name.* | db_name.tbl_name | tbl_name

  • *:表示当前数据库中的所有表(必须use 逻辑库之后才能执行);
  • *.*:表示所有数据库中的所有表/视图;
  • db_name.*:表示某个数据库中的所有表/视图,db_name 指定数据库名;
  • db_name.tbl_name:表示某个数据库中的某个表/视图,db_name 数据库名,tbl_name 表名;
  • tbl_name:表示某个表/视图,tbl_name 指定表名(必须use 逻辑库之后才能执行)

服务端GRANT语法示例:

全局权限:

grant all on *.* to ' test_ct '@'localhost' identified by ' test_ct ' with max_user_connections 3;

库级权限:

grant all on test_ct.* to 'test_ct'@'localhost' identified by 'test_ct';

表级/视图级权限:

grant update on test_ct.test_aa to 'test_ct'@'localhost' identified by 'test_ct';

赋权注意事项:

  1. 执行赋权操作的用户本身必须有super权限。
  2. 可在赋权时同步创建用户但需带上密码。
  3. super和file必须赋全局管理权限,不支持库和表级别授权。
  4. all权限不能与其他权限同时使用只能单独赋权。
  5. 权限修改后只对新连接生效,不会改变已创建的连接权限。
  • 执行赋权操作的用户不具有super权限,提示如下:

在这里插入图片描述

  • 赋权时同步创建用户

在这里插入图片描述

  • 赋权时同步创建用户不带密码,提示如下:

在这里插入图片描述

  • super只能赋全局权限,不支持库和表级别授权,如下图:

在这里插入图片描述

  • file权限只能赋全局权限,不支持库和表级别授权

在这里插入图片描述

  • all权限只能单独授权,不能和其他权限项同时授权

在这里插入图片描述
6. 使用GRANT语句修改用户密码时,必须注意,若修改的用户对象是Keepalived/LVS配置文件中的连接用户,必须同步修改Keepalived/LVS配置文件中对应的连接密码并加载配置,否则可能导致计算节点高可用切换异常、或者LVS流量分发异常等问题。另外,也需要同步修改管理平台连接计算节点的用户密码配置,否则会立即导致管理平台无法连接计算节点,进而无法监控、无法操作等问题。

REVOKE删除权限

REVOKE删除权限语法:

REVOKE priv_type [, priv_type] ...ON priv_level FROM 'user_name'@'host_name' [, 'user_name'@'host_name'] ...

服务端REVOKE语法示例:

revoke select,update,delete,insert,create,drop,alter,file,super on *.* from jingjing05;

解权注意事项:

  1. 执行删除权限操作的用户本身必须有super权限。
  2. 可以移除部分权限和所有权限,可以移除对应库、表级别的权限。
  3. 权限项可重复移除,但移除不存在的类型会报语法错误。
  4. 权限修改后只对新连接生效,不会改变已创建的连接权限。
  • 执行用户没有super权限时删除权限,提示如下:

在这里插入图片描述

  • 支持移除部分权限

在这里插入图片描述

  • 支持移除所有权限

在这里插入图片描述

  • 支持移除库级别权限

在这里插入图片描述

  • 支持移除表/视图级别权限

在这里插入图片描述

  • 移除权限后再次使用该权限,报错提示如下

在这里插入图片描述
在这里插入图片描述

角色管理语句

计算节点支持使用SQL语句进行ROLE角色的添加、赋权、删除等权限操作。ROLE角色是一个权限的集合,可以被赋予给多个用户进行用户权限的统一管理。

语句类型 SQL语句 支持状态 说明
角色管理语句 CREATE ROLE 支持 创建角色
DROP ROLE 支持 删除角色
GRANT 支持 赋予权限
REVOKE 支持 删除权限

创建角色

  1. 创建角色语法:
CREATE ROLE [IF NOT EXISTS] 'role_name'@'host_name' [,'role_name'@'host_name']...
  1. 语法示例:
CREATE ROLE 'web_writer', 'web_reader';
CREATE ROLE 'role01', 'role02';
CREATE ROLE 'role01'@'localhost';
  1. 语法说明:
  • role_name表示创建的角色名。
  • host_name表示主机名。在创建用户语法中,主机名的作用是指定用户访问逻辑库的IP地址;而在创建角色语法中,主机名并不表示IP地址,其意义类似于角色名,可以看作一种分类方式,其通过与角色名的多种排列组合以便对角色进行分类管理。 例如,当role_name均为admin,则允许存在多种admin角色,如admin@writer、admin@reader、admin@other等。当不指定主机名时,默认补充为%,则为admin@%。在ROLE定义中,%不具备通配符作用,只是表面上的符号意义,表示将未指定主机名的角色统一归类到%分类下。
  1. 注意事项:
  • 创建角色时执行用户必须有SUPER权限。当不具有SUPER权限的用户执行创建角色操作时,提示如下:

在这里插入图片描述

  • 重复创建角色,提示如下

在这里插入图片描述

删除角色

  1. 删除角色语法:
DROP ROLE [IF EXISTS] role [,role]...
  1. 语法示例:
DROP ROLE 'web_writer', 'web_reader';
  1. 注意事项:
  • 删除角色,则会从授予该角色的每个用户中删除它;
  • 删除角色时执行用户必须具有SUPER权限。当不具有SUPER权限的用户执行删除角色操作时,提示如下:

在这里插入图片描述

GRANT赋权

  1. 赋予角色权限

赋予角色权限语法:

GRANT priv_type [, priv_type ] ... ON  priv_level  TO 'role_name'@'host_name' [, 'role_name'@'host_name'] ...

语法示例:
库级别:

GRANT SELECT ON web_db.* TO 'role01';
--授权web_db库中所有表/视图的select权限给角色role01

表/视图级别:

GRANT SELECT, UPDATA, DELETE ON web_db.web_tbl TO 'role02';
--授权web_db库中web_tbl表/视图的select、update、delete权限给角色role02

全局级别:

GRANT ALL ON *.* TO 'role03';
--授权所有库中所有表/视图的全部权限给角色role3

语法说明:

  • 可授权的权限类型priv_type包括:SELECT、UPDATE、DELETE、INSERT、CREATE、DROP、ALTER、FILE、SUPER
  • 可授权的权限范围priv_level包括:|.|db_name.|db_name.tbl_name|tbl_name,具体说明如下:
Prive_level 说明 使用前提
* 表示当前数据库中的所有表/视图 必须选定逻辑库之后才能执行
. 表示所有数据库中的所有表/视图
db_name.* 表示某个数据库中的所有表/视图;db_name指定数据库名
db_name.tbl_name 表示某个数据库中的某张表;db_name指定数据库名、tbl_name指定表名/视图名
tbl_name 表示当前数据库中的某张表;tbl_name指定表名/视图名 必须选定逻辑库之后才能执行
  • 可使用ALL [PRIVILEGES] 为用户赋予所有权限(包括SUPER权限)在内。

在这里插入图片描述
注意事项:

  • 赋权时执行用户必须具有SUPER权限。当不具有SUPER权限的用户执行赋权操作时,提示如下:

在这里插入图片描述

  • 重复授权无报错,可以直接执行成功:

在这里插入图片描述

  1. 赋予角色权限给用户

赋予角色权限给数据库用户语法:

GRANT <ROLE> TO <USER>

语法示例:

GRANT role01 TO user01;
GRANT role01 TO user01, user02;
GRANT role01, role02 TO user03;
GRANT role01, role02 TO user01, user02, user03;

语法说明:
允许同时赋予多个用户多个权限。

注意事项:

  • 赋权时执行用户必须具有SUPER权限。当不具有SUPER权限的用户执行赋权操作时,提示如下:

在这里插入图片描述

  • 角色不能授予匿名用户,提示如下:

在这里插入图片描述

  • 用户和角色的权限有可互换性,角色权限可被赋予给用户,同理可将用户视为角色,并将该用户权限授予其他用户或角色:

在这里插入图片描述

REVOKE撤销权限

  1. 从角色中撤销权限

撤销角色权限语法:

REVOKE priv_type [, priv_type ] ...ON priv_level FROM 'role_name'@'host_name' [, 'role_name'@'host_name'] ...

语法示例:
撤销部分权限:

REVOKE SELECT, UPDATE ON test_database.* FROM role01;
-- 将赋予的test_database库中所有表/视图的SELECT、UPDATE权限从角色role01中移除

撤销所有权限:

REVOKE ALL ON test_database.* FRON role01;
-- 将赋予的test_database库中所有表/视图的全部权限从角色role01中移除

语法说明:

  • 可撤销的权限类型priv_type和范围priv_level同GRANT一致。支持移除库、表、全局级别的权限,支持移除全部权限和部分权限。
  • 可使用ALL [PRIVILEGES] 撤销所有权限(包括SUPER权限)在内。

在这里插入图片描述

注意事项:

  • 撤销角色中的权限,则被授予该角色的每个用户中的对应权限都会被撤销;
  • 撤销权限时执行用户必须具有SUPER权限。当不具有SUPER权限的用户执行撤权操作时,提示如下:

在这里插入图片描述

  1. 从用户中撤销角色

从数据库用户中撤销已赋予角色的语法:

REVOKE <ROLE> FROM <USER>

语法示例:

REVOKE role01 FROM user01;
REVOKE role01, role02 FROM user01;
REVOKE role01 FROM user01, user02;
REVOKE role01, role02 FROM user01, user02;

语法说明:
允许同时从多个用户中撤销多个角色

注意事项:
撤销角色时执行用户必须具有SUPER权限。当不具有SUPER权限的用户执行撤销角色操作时,提示如下:

查询角色权限

  1. 查询角色权限

查询角色权限语法:

SHOW GRANTS FOR <ROLE>;

语法示例:

SHOW GRANTS FOR role01;
-- 查看角色role01的权限

mysql> show grants for role01;
+----------------------------------------------------------+
| Grants for role01@%                                          |
+----------------------------------------------------------+
| GRANT SELECT,INSERT ON 'TEST_DATABASE'.* TO 'role01'@'%'    |
| GRANT 'user01'@'%' TO 'role01'@'%'                               |
+----------------------------------------------------------+
1 row in set (0.01 sec)

语法说明:

  • 查询结果直接通过之前操作的赋权语句显示已配置给角色的权限,若分次配置了相同库表的权限,则会整合显示;
  • 查询结果显示顺序为,先显示单独配置的权限,再显示配置的ROLE权限(只显示赋予何种ROLE权限,不会具体到ROLE中有何权限)。

注意事项:
因为用户和角色的权限有可互换性,所以查询角色权限的语法与查询用户权限的语法相同。

  1. 查询用户权限关联角色权限

查询用户权限关联角色权限语法:

SHOW GRANTS FOR <USER> USING <ROLE>;

语法示例:

SHOW GRANTS FOR user01 USING role01;
-- 查看用户user01的权限,并细化到已赋权的角色role01内有何种权限

语法说明:
与查询角色权限语句不同的是,带USING的用户权限查询语句,除了显示单独配置给用户的权限和ROLE权限外,还会显示ROLE本身的权限集合;便于一次查询该角色下具体有何权限。

例如:赋予role01角色基于库表test_database.的select, insert权限;赋予user01用户基于库表test_database.的update权限;赋予role01角色基于库表zyftest.*的create权限;赋予user01用户role01的全部权限。完成上述权限赋予操作后,使用using role语句查看user01的权限,会尽数列举用户user01所拥有的全部权限(包含role01内的权限,且显示为赋予user01)

mysql> show grants for user01 using role01;
+----------------------------------------------------------+
| Grants for user01@%                                      |
+----------------------------------------------------------+
| GRANT SELECT,INSERT ON `TEST_DATABASE`.* TO `user01`@`%` |
| GRANT UPDATE ON `TEST_DATABASE`.* TO `user01`@`%`        |
| GRANT CREATE ON `ZYFTEST`.* TO `user01`@`%`         |    
| GRANT `role01`@`%` TO `user01`@`%`                       |
+----------------------------------------------------------+
3 rows in set (0.01 sec)

角色权限注意事项

  • Role 和 User 无本质区别
  • CREATE ROLE后, Role 状态为禁用,无法用于登录
  • CREATE\DROP\GRANT\REVOKE 都需要且只需要 SUPER 权限
  • Role 功能不需要关注存储节点版本
  • 表级别权限的Role,赋权给User后,在管理平台User表权限列表不显示该权限(User有相关表权限)
  • Role 创建时可以不指定密码,当解除该Role的禁用状态时,可以空密码登录,但无法在管理平台修改这个Role的密码
  • Role\User之间可以相互赋权
  • Role\User 无法赋权给自己

标签:name,角色,16,数据库,用户,支持,role01,hhdb,权限
From: https://www.cnblogs.com/henghuixinda/p/18576147

相关文章

  • hhdb数据库介绍(9-17)
    SQL语法支持其他语句表维护语句语句类型SQL语句支持状态说明表维护语句ANALYZETABLE禁用CHECKTABLE禁用CHECKSUMTABLE禁用OPTIMIZETABLE禁用REPAIRTABLE禁用视图相关语句语句类型SQL语句支持状态说明视图相关语句......
  • hhdb数据库介绍(9-18)
    SQL语法支持计算节点语法特殊功能默认分片规则建表在使用关系集群数据库时,需要先将表的分片规则信息配置好之后才能创建表。实际使用过程中,用户可能对关系集群数据库及分片规则不了解,这就需要一种能直接过渡到HHDBServer的方案,该方案能根据逻辑库关联的分片节点数量自动对表生......
  • 【数据库设计】ER图,关系属性 是属于哪个实体的
    在ER图(实体-关系图)中,关系属性通常属于**关系(Relationship)**本身,而不是某一个具体的实体(Entity)。关系属性用于描述两个或多个实体之间关系的特征或附加信息。1.关系属性的概念:关系属性是与关系(即菱形)相关的属性,而不是直接隶属于某个单独的实体。它描述的是关系本身的特......
  • 面试官:为什么数据库连接池不采用 IO 多路复用?
    今天我们聊一个不常见的Java面试题:为什么数据库连接池不采用IO多路复用?这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcatconnectionpool等技术来与DB连接,哪怕整个程序已经变成以Netty为核心。这到底......
  • 11-29大型数据库实验
    实验内容与完成情况:MySQL操作Shell命令操作sql复制代码--创建Student表CREATETABLEStudent(   NameVARCHAR(50),   EnglishINT,   MathINT,   ComputerINT); --插入数据INSERTINTOStudentVALUES('zhangsan',69,86,77),('lisi',......
  • Python知识分享第十三天-数据库介绍
    一、数据库概述1、数据库介绍数据库就是存储数据的仓库,其本质是一个文件系统,按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。随着互联网的高速发展,大量的数据在不断的产生,伴随而来的是如何高效安全的存储数据和处理数据,而这一问题成......
  • HCIA-16 广域网技术
    目录早期广域网技术概述什么是广域网广域网与局域网区别早期广域网技术介绍广域网络设备角色介绍早期广域网技术的应用PPP协议原理与配置PPP协议概述PPP链路建立流程PPP链路接口状态机LCP报文格式LCP协商过程PPP认证模式-PAPPPP认证模式-CHAPNCP协商PPP基础配置命令配置举例-......
  • 软件设计:实验16:命令模式
    实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对......
  • 16Java集合进阶(Set、Map集合、可变参数、斗地主案例)
    请先看我上篇文章15Java集合进阶(异常、集合)-CSDN博客一、Set系列集合1.1认识Set集合的特点Set集合是属于Collection体系下的另一个分支,它的特点如下图所示下面我们用代码简单演示一下,每一种Set集合的特点。//Set<Integer>set=newHashSet<>(); //无序、无索引、不重......
  • 从0开始的STM32开发之旅——TM1637数码管
    目录前言数码管介绍一般数码管的显示原理编写驱动第一步——观察我们的TM1637编写驱动第二步——查看如何发起通信第三步——封装协议层bonus:亮度设置第四步:上升为业务逻辑第五步:构建demo示例前言在知识内容上,他算是软件IIC模拟的一个例子,所以实际上也算是使用GP......