hhdb数据库介绍(9-4)

news2024/11/13 8:46:44

访问安全

权限体系

计算节点有两类用户,一类是计算节点数据库用户,用于操作数据,执行SELECT,UPDATE,DELETE,INSERT等SQL语句。另一类是关系集群数据库可视化管理平台用户,用于管理配置信息。此章节将着重介绍计算节点用户相关内容。

基础权限

计算节点数据库用户必须被赋予逻辑库的权限,才能访问逻辑库。计算节点提供了如下操作权限:

权限类型可执行的SQL语句
CREATECREATE TABLE,CREATE INDEX
DROPDROP TABLE,DROP INDEX,TRUNCATE TABLE,RENAME TABLE
ALTERALTER TABLE,RENAME TABLE
SELECTSELECT,INSERT...SELECT
UPDATEUPDATE
DELETEDELETE,REPLACE
INSERTINSERT,REPLACE,INSERT...SELECT
SUPER管理端的语句, /!HotDB:dnid=?/
FILESELECT...INTO OUTFILE,LOAD DATA

SUPER权限说明:

具有SUPER权限的user,可以登录计算节点的3325端口,可执行管理端的所有SQL语句;否则,不能登录管理端与执行管理端的SQL语句。

拥有SUPER权限的user,可在3323端口执行HINT语句。如:

/*!hotdb:dnid=1*/select * from table;

权限范围:

为计算节点数据库用户赋予权限时,除SUPER权限外,可指定user对逻辑库或表的操作权限。权限范围分为全局权限、逻辑库权限及表权限:

  • 全局权限:拥有全局权限的user对所有逻辑库下的所有对象都拥有指定的权限。例如:勾选全局权限:SELECT,UPDATE,INSERT,CREATE,点击保存则当前用户可对所有逻辑库及表进行S/U/I/C操作。

  • 逻辑库权限:拥有逻辑库权限的user对该逻辑库下的所有对象拥有指定权限。

  • 表权限:表权限又分为表允许权限和表拒绝权限。拥有表允许权限的用户对该表拥有勾选的权限;拥有表拒绝权限的用户将拒绝勾选的权限,对于没有勾选的权限,需要在表允许权限下勾选后方能拥有。拥有表拒绝权限的用户对该表拥有除了勾选的权限以外的其他所有权限;例如:勾选表拒绝权限:SELECT,UPDATE,INSERT,CREATE,点击保存则当前用户不可对该表进行S/U/I/C操作,若该用户勾选了表允许权限:DELETE,DROP,则当前用户拥有DELETE和DROP权限。

SUPER权限不指定特定逻辑库。只有持有SUPER权限的user可以执行管理端的语句,管理端具体功能可参考管理端信息监控章节。

权限之间相互独立,拥有表的UPDATE权限,并不代表拥有该表的SELECT权限;拥有SUPER权限,并不代表拥有表的操作权限。另,TRIGGER相关的权限目前未单独维护,遵循权限规则为:CREATE TRIGGER 需要 CREATE 权限、DROP TRIGGER 需要 DROP权限、TRIGGER内部语句不验证权限、DEFINER 相关全去除、SHOW TRIGGERS时相关字段为当前用户。

行控制权限

计算节点支持通过手动修改配置库中行权限控制表hotdb_user_row_privilege的方式,为数据库用户增加行控制权限。

1.hotdb_user_row_privilege表结构如下:

  • username为用户名,host为主机名;这两列与计算节点配置库中hotdb_user表关联,用于确认需要配置行权限的数据库用户。用户名和主机名必须与hotdb_user表内数据完全对应;

  • table_scope用于确认需要配置行权限的库表。支持四种填写格式:

    • .:所有库下的所有表;

    • db_name.*:某库下的所有表,db_name为逻辑库名;

    • *.tbl_name:所有库下的某张表,tbl_name为表名;

    • db_name.tbl_name:某库下的某表;

  • where_condition用于控制用户可以访问的行数据条件,可以是单个条件也可以是多个条件,多个条件用and链接;

  • enable默认为1,表示开启行控制权限;可以手动修改为0,则停用该权限;

  • create_time和update_time分别为创建该权限的时间和更新时间。

2.手动配置行控制权限示例:

  • 登陆计算节点配置库
mysql -uhotdb_config -pDRDS_config@2013 -P3306 -h<计算节点配置库IP地址>
use hotdb_config;
  • 手动插入表数据,为数据库用户配置表的行控制权限。插入规则后,需动态加载生效
INSERT INTO hotdb_user_row_privilege (username, host, table_scope, where_condition) VALUES (‘用户名’, ‘主机名’, ‘逻辑库名.表名’, ‘行控制条件’);

示例:
mysql> insert into hotdb_user_row_privilege (username, host, table_scope, where_condition) values ('user_row', 'host', 'test_database.customer', 'id>50');
-- 表示user_row@%用户对于test_database库中的customer表,只拥有id大于60的行的权限。
  • 可以通过修改enable字段的值,停用或启用行控制权限。修改后需要动态加载生效

  • 可以在3323服务端口执行show hotdb grants for ‘用户名’@‘主机名’查看数据库用户已配置的行控制权限。

3.注意事项:

  • 行控制条件的内容必须符合MySQL语法规则,存在error in your SQL syntax的会被自动跳过不生效;

  • 当配置的行控制条件存在语法问题时,动态加载后计算节点日志hotdb.log会输出warning日志。

通信认证

简介:SSL(Secure Socket Layer 安全套接层)是HTTPS下的一个协议加密层,有1、2、3三个版本,目前只使用SSL 3.0。IETF对SSL进行标准化后,在3.0版本的基础上发布了TLS1.0(Transport Layer Security 安全传输层协议)。TLS协议目前有1.0、1.1、1.2、1.3四个版本。支持SSL加密连接方式登录计算节点。

生成TLS秘钥

生成证书和密钥文件

可参考官方文档生成自签名的秘钥。例如:可以用自带的命令mysql_ssl_rsa_setup来生成证书和密钥文件。

mysql_ssl_rsa_setup --datadir=/usr/local/crt/

其中,客户端需要的秘钥有:ca.pem、client-cert.pem、client-key.pem;

服务端需要的秘钥有:ca.pem、server-cert.pem、server-key.pem;

注意
自带命令生成的证书无法进行CA认证,参考链接:https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html

如果需要生成能够进行CA认证的自签名证书,需要使用openssl工具,可参考下列步骤进行:

1.生成CA根证书私钥:openssl genrsa 2048 > ca-key.pem
2.生成CA根证书:openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem,3.注意信息填写步骤中Common Name最好填入有效域名,并且不能与签发的证书中的Common Name一样,这里我们填写127.0.0.1
生成服务器证书请求文件:openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem,注意信息填写步骤中Common Name需要填入计算节点所监听的IP地址/域名,客户端将用此IP进行服务的连接,注意不能和CA证书中的信息一样
4.用openssl rsa命令处理秘钥以删除密码:openssl rsa -in server-key.pem -out server-key.pem
5.为服务端生成自签名证书:openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
6.生成客户端证书请求文件:openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem,注意信息填写步骤中Common Name不能和CA证书中的信息一样
7.用openssl rsa命令处理秘钥以删除密码:openssl rsa -in client-key.pem -out client-key.pem
8.为客户端生成自签名证书:openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

生成server.jks文件
对于计算节点来说,需要将秘钥转为Java标准的KeyStore文件。即下文中提到的.jks。生成步骤为:

1.先使用openssl工具将cert和key文件合成pfx文件:

本次样例中密码输入SDcrtest(程序自带的密钥文件其密码为hotdb.com,可直接使用,此处示例为需要另外重新生成秘钥时使用)

openssl pkcs12 -export -out server.pfx -inkey server-key.pem -in server-cert.pem -CAfile ca.pem

2.用Java提供的keytool工具将pfx转换为jks文件:

keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12

配置TLS秘钥

生成好TLS秘钥后,将相应的秘钥文件分别传输到计算节点服务端和客户端所在的服务器上,并在计算节点中按要求配置如下三个参数之后才能使用:

<property name="enableSSL">false</property><!-- 是否开启SSL连接功能(Enable SSL connection or not) -->

参数说明:true代表开启SSL功能,false代表关闭SSL功能,默认值为false

<property name="keyStore">/server.jks</property><!-- 用于TLS连接的数据证书.jks文件的路径(Path to the data certificate .jks file for TLS connection) -->

参数说明: 计算节点在conf目录下默认提供了一套server.jks和client相关的pem文件,其密码为hotdb.com,可用于进行简单的连接测试。当选择使用自己生成 TLS证书或者使用付费的TLS证书进行连接,需根据实际的路径和名称来填写。例如:/usr/local/crt/server.jks。

<property name="keyStorePass">BB5A70F75DD5FEB214A5623DD171CEEB</property><!-- 用于TLS连接的数据证书.jks文件的密码(Password of the data certificate .jks file for TLS connection) -->

参数说明:程序自带的密钥文件中密码是hotdb.com,通过select hex(aes_encrypt('hotdb.com',unhex(md5('Hotpu@2013#shanghai#2017'))))s加密得到默认keyStorePass:BB5A70F75DD5FEB214A5623DD171CEEB。若使用自己生成的密钥文件,需根据实际输入的密码来填写。例如:前文输入密码SDcrtest,通过select hex(aes_encrypt('SDcrtest',unhex(md5('Hotpu@2013#shanghai#2017'))))查询到keyStorePass值,然后填写C43BD9DDE9C908FEE7683AED7A301E33。

参数的修改无需重启计算节点服务, 动态加载时会重新读取server.jks文件。若SSL相关逻辑初始化失败,动态加载不会失败,但后续的SSL连接无法正常建立,非SSL连接不受影响。

TLS连接登录

客户端方式
使用MySQL协议的客户端,可以使用如下方式指定秘钥文件进行连接:

mysql -ujing01 -p123456 -h192.168.240.117 -P3323 --ssl-ca=/usr/local/crt/ca.pem --ssl-cert=/usr/local/crt/client-cert.pem --ssl-key=/usr/local/crt/client-key.pem --ssl-mode=verify_ca

JDBC方式
对于JDBC来说,也需要相应的秘钥文件。操作方式可参考官方手册,这里可通过两种方式:

1.可通过将CA导入Java信任库的方式:

keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore

则JDBC连接时使用truststore文件, 例如:

jdbc:mysql://192.168.240.117:3323/smoketest?clientCertificateKeyStoreUrl=file:/usr/local/crt/truststore&clientCertificateKeyStorePassword=hotdb.com&verifyServerCertificate=true

2.可通过使用证书的方式:

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -out client-keystore.p12
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -destkeystore keystore -deststoretype JKS

则JDBC连接时使用keystore文件, 例如:

jdbc:mysql://192.168.240.117:3323/smoketest?clientCertificateKeyStoreUrl=file:/usr/local/crt/keystore&clientCertificateKeyStorePassword=hotdb.com

Navicat等类似的客户端方式
对于Navicat等类似的客户端, 可以在客户端设置中配置相关的文件位置进行连接

注意
对于某些版本的Navicat可能在勾选验证CA证书名后无法连接,比如提示错误:“2026 SSL connection error:
ASN: bad other signature
confirmation”,这可能是该版本的动态链接库不兼容,需要将其目录下的libmysql.dll替换为MySQL
Workbench中的同名文件,或者更新到更高的版本,参考链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

如何保证kafka生产者数据可靠性

ack参数的设置&#xff1a; 0&#xff1a;生产者发送过来的数据&#xff0c;不需要等数据落盘应答 假如发送了Hello 和 World两个信息&#xff0c;Leader直接挂掉&#xff0c;数据就会丢失 生产者 ---> Kafka集群 一放进去就跑 数据可靠性分析&#xff1a;丢数 1&#…

python画图|text()和dict()初探

【1】引言 在进行hist()函数的学习进程中&#xff0c;了解到了subplot_mosaic()函数&#xff0c;在学习subplot_mosaic()函数的时候&#xff0c;又发现了text()和dict()函数。 经探究&#xff0c;text()和dict()函数有很多一起使用的场景&#xff0c;为此&#xff0c;我们就一…

网线类别线芯含义和传输距离以及水晶头制作标准

网线八芯每根的含义&#xff1a; 网线的八根线芯&#xff0c;也被称为RJ45网线中的8芯&#xff0c;网线采用8根线芯&#xff0c;这八根线芯各自承担着特定的功能。这8根线芯被分为4对&#xff0c;每对以特定的方式绞合在一起&#xff0c;8芯网线主要是为了减少电磁信号的相互干…

每天五分钟深度学习PyTorch:基于全连接神经网络完成手写字体识别

本文重点 上一节我们学习了搭建普通的全连接神经网络,我们现在用它来解决一个实际问题,我们用它跑一下手写字体识别的数据,然后看看它的效果如何。 网络模型 class ThreeNet(nn.Module) : def __init__ (self,in_dim,n_hidden_1,n_hidden_2,out_dim): super(ThreeNet, self…

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据&#xff0c;LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据&#xff0c;并通过LabVIEW上位机绘制演…

基于MFC实现的赛车游戏

一、问题描述 游戏背景为一环形车道图&#xff0c;选择菜单选项“开始游戏”则可开始游戏。游戏的任务是使用键盘上的方向键操纵赛道上的蓝色赛车追赶红色赛车&#xff0c;红色赛车沿车道顺时针行驶&#xff0c;出发点和终点均位于车道左上方。任一赛车先达到终点则比赛结束。…

实验三 JDBC数据库操作编程(设计性)

实验三 JDBC数据库操作编程&#xff08;设计性&#xff09; 实验目的 掌握JDBC的数据库编程方法。掌握采用JDBC完成数据库链接、增删改查&#xff0c;以及操作封装的综合应用。实验要求 本实验要求每个同学单独完成&#xff1b;调试程序要记录调试过程中出现的问题及解决办法…

Java期末复习暨学校第二次上机课作业

Java期末复习暨学校第二次上机课作业&#xff1a;了解程序的控制结构&#xff0c;掌握顺序结构程序的设计方法&#xff0c;掌握分支程序设计方法。 第一题&#xff1a; 闰年有两种判断方式&#xff1a; &#xff08;1&#xff09;&#xff1a;能被4整除但不能被100整除 &…

Windows配置NTP时间同步

Windows下实现NTP时间同步 1、Windows时间服务(W32Time)2、Windows 时间同步的工作原理3、配置和管理 Windows 时间同步3.1 命令行工具&#xff1a;w32tm3.2 控制面板中的设置 4. 高级设置&#xff08;Windows Server 环境&#xff09;5.调整时间同步的间隔5.1 通过组策略调整时…

Go八股(Ⅳ)***slice,string,defer***

***slice&#xff0c;string&#xff0c;defer*** 1.slice和arry的区别 arry&#xff1a; Go语言中arry即为数据的一种集合&#xff0c;需要在声明时指定容量和初值&#xff0c;且一旦声明就长度固定&#xff0c;访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

STM32H503开发(2)----STM32CubeProgrammer烧录

STM32H503开发----2.STM32CubeProgrammer烧录 概述硬件准备视频教学样品申请源码下载参考程序自举模式BOOT0设置UART烧录USB烧录 概述 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境&#xff0c;通过…

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二)

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver&#xff08;二&#xff09; 本教程作为gdb/gdbserver编译安装教程的一个补充&#xff0c;教会大家如何使用gdb/gdbserver进行远程调试。 如上图所示&#xff0c;我们需要将编译后的gdbserver上传至目标设备&#xff0c;其上…

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表&#xff0c;主键是学号&#xff0c;含有学生号、学生名、班级、班级名&#xff0c;违反了数据库第几范式&#xff1f; --非主属性不依赖于主键&#xff0c;不满足第二范式 有一个订单表&#xff0c;包含以下字段&#xff1a;订单ID&…

【时间之外】IT人求职和创业应知【31】

目录 新闻一&#xff1a;2024年“秦创原沣东杯”陕西省科技工作者创新创业大赛颁奖仪式暨沣东新城机器人产业发展大会盛大启幕 新闻二&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 新闻三&#xff1a;“5G工业互联网”融合应用试点城市名单…

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

利用游戏引擎的优势

大家好&#xff0c;我是小蜗牛。 在当今快速发展的游戏产业中&#xff0c;选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎&#xff0c;为开发者提供了丰富的工具和资源&#xff0c;使他们能够高效地开发出优秀的游戏。本文将探讨如何…

财务源码 财务软件 SaaS 云财务

&#x1f50d; 专业财务源码&#xff0c;助您快速开展财务管理&#xff01;&#x1f4c8; &#x1f3af; 我们提供一系列高质量、可定制、易于使用的财务源码&#xff0c;帮助您快速搭建强大的财务管理系统。无论是小型企业、中型企业&#xff0c;还是个人用户&#xff0c;我们…