hhdb数据库介绍(9-4)

访问安全

权限体系

计算节点有两类用户,一类是计算节点数据库用户,用于操作数据,执行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.rhkb.cn/news/467241.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

喜报!景联文科技成功通过DCMM数据管理能力成熟度二级认证

10月30日&#xff0c;中国电子信息行业联合会公示了新一批DCMM贯标企业&#xff0c;景联文科技成功通过DCMM数据管理能力成熟度二级认证&#xff08;乙方认证&#xff09;。 DCMM是《数据管理能力成熟度评估模型》的简称&#xff0c;是我国在数据管理领域首个正式发布的国家标准…

Android setContentView执行流程(1)-生成DecorView

setContentView的流程主要就是讲在Activity的onCreate方法中调用setContentView方法之后&#xff0c;我们自定义的xml文件加载的过程&#xff0c;学习它可以让我们对整个View树的理解更加透彻&#xff0c;并且通过源码的学习&#xff0c;我们可以从根本上理解一些问题&#xff…

《操作系统 - 清华大学》2 -1:操作系统的启动

文章目录 0. 内容摘要1. 计算机体系机构概述2.启动2.1 启动时计算机内存和磁盘布局2.2. 内存映射 3. 系统调用、异常、中断3.1 定义3.2 背景3.3 中断、异常和系统调用的不同点3.3.1 源头3.3.2 处理时间3.3.3 响应 0. 内容摘要 两部分的内容 第一部分是启动。知道操作系统怎么是…

在服务器里安装2个conda

1、安装新的conda 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 本文选择&#xff1a;Anaconda3-2023.03-1-Linux-x86_64.sh 安装&#xff1a;Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

【系统集成项目管理工程师】知识点汇总

十五矩阵图 ITTO&#xff08;Input - Tools & Techniques - Output&#xff09;一览图 整合管理、范围管理 进度管理、成本管理 成本管理&#xff08;续&#xff09;、质量管理、资源管理 沟通管理、风险管理 风险管理&#xff08;续&#xff09;、采购管理、干系人管理

Java | Leetcode Java题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution {static final int MOD 1000000007;public int checkRecord(int n) {long[][] mat {{1, 1, 0, 1, 0, 0},{1, 0, 1, 1, 0, 0},{1, 0, 0, 1, 0, 0},{0, 0, 0, 1, 1, 0},{0, 0, 0, 1, 0, 1},{0, 0, 0, 1, 0, 0}};long[][] re…

极品模板内容付费管理系统(PHP内容知识付费系统)

极品模板内容付费管理系统是一款基于PHP和MySQL技术开发的源码产品&#xff0c;旨在为用户提供一个功能全面、易于管理和扩展的内容付费平台。该系统支持多种付费模式&#xff0c;具备强大的内容管理功能&#xff0c;适合各类内容创作者和企业家构建知识付费、会员服务、在线教…

设计者模式之策略模式

前言 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都写在对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤&#xff1a; ###1.确定应用目标和用户群体 在开始之前&#xff0c;你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如&#xff0c;如果你的应用是为了…

LeetCode 热题 100之 堆

1.数组中第k个最大元素 和Acwing 786 第k个数一模一样 排序 思路分析1&#xff1a;此题要求时间复杂度未为O(n)。虽然库函数sort和快速排序都能过&#xff0c;但是时间复杂度不满足条件。下面优化快速排序&#xff0c;写一个快速选择算法。我们可以引入随机化来加速这个过程&…

redis笔记-数据结构

zset zset一方面它是一个 set&#xff0c;保证了内部value 的唯一性&#xff0c;另一方面它可以给每个 value 赋予一个 score&#xff0c;代表这个 value 的排序权重。 zset的底层是由字典和跳表实现。 字典主要用来存储value和score的对应关系。跳表这个数据结构主要用来提…

day20-21之间的项目实战:若依ruoyi开发(可以跳过)

一&#xff0c;项目概述 官网文档地址&#xff1a;http://doc.ruoyi.vip/ rouyi是一个后台管理系统&#xff0c;基于经典技术组合&#xff08;spring boot&#xff0c;apache shiro&#xff0c;mybatis&#xff0c;thymeleaf&#xff09;主要是让开发者注重专注业务&#xff0…

【Android】名不符实的Window类

1.“名不符实”的Window类 Window 是一个窗口的概念&#xff0c;是所有视图的载体&#xff0c;不管是 Activity&#xff0c;Dialog&#xff0c;还是 Toast&#xff0c;他们的视图都是附加在 Window 上面的。例如在桌面显示一个悬浮窗&#xff0c;就需要用到 Window 来实现。Wi…

SDL事件相关

文章目录 事件相关的函数和数据结构用户自定义事件代码相关&#xff1a; 事件相关的函数和数据结构 SDL_WaitEvent :等待一个事件SDL_PushEvent 发送一个事件SDL_PumpEvents(): 将硬件设备产生的时间放入事件队列 &#xff0c;用于读取事件&#xff0c;在调用该函数之前&#…

机器人课程——使用TIA Portal V15博图软件进行西门子组态——带显示屏

一.打开TIA Portal V15博图软件创建项目 1.选择创建新项目 创建完成后选择PLC 二.创建完成后选择设备PLC (此处以S7-1200 1214FC DC/DC/DC 为例) 三.添加扩展板&#xff08;如有——这里以223-1BL32-0XB0为例&#xff09; 四.更改扩展版地址 五.添加触摸屏&#xff08;这里以…

【数据集】【YOLO】【目标检测】道路结冰数据集 1527 张,YOLO目标检测实战训练教程!

数据集介绍 【数据集】道路结冰数据集 1527 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含2种分类&#xff1a;“clear_road, ice_road”。数据集来自国内外图片网站和视频截图&#xff0c;部分数据经过数据增强处理。检测范围监控视角检测、无人机视…

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

利用京东API接口实现商品详情数据获取与表格化展示

在电商数据分析与运营过程中&#xff0c;获取商品详情数据是至关重要的一环。京东作为国内领先的电商平台&#xff0c;其开放平台提供了丰富的API接口&#xff0c;使得开发者能够高效地获取商品信息。本文将详细介绍如何通过京东API接口获取商品详情数据&#xff0c;并将其整理…

数据结构-并查集专题(1)

一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛&#xff0c;于是开始按专题梳理一下对应的知识点&#xff0c;先从简单入门又值得记录的内容开始&#xff0c;并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子&#xff0c;但是自己也小做…

博奥龙/诊断原料抗体对

在ELISA中&#xff0c;抗体与抗原的结合精确度依赖于抗体的特异性和灵敏度。特异性较差的抗体可能导致显著的非特异性背景信号&#xff0c;而特异好但亲和力弱的抗体可能会被洗掉&#xff0c;从而产生假阴性数据。因此&#xff0c;选择合适的可避免交叉反应和确保检测结果的准确…