计算节点有两类用户,一类是计算节点数据库用户,用于操作数据,执行SELECT,UPDATE,DELETE,INSERT等SQL语句。另一类是关系集群数据库可视化管理平台用户,用于管理配置信息。此章节将着重介绍计算节点用户相关内容。
计算节点数据库用户必须被赋予逻辑库的权限,才能访问逻辑库。计算节点提供了如下操作权限:
权限类型 | 可执行的SQL语句 |
---|---|
CREATE | CREATE TABLE,CREATE INDEX |
DROP | DROP TABLE,DROP INDEX,TRUNCATE TABLE,RENAME TABLE |
ALTER | ALTER TABLE,RENAME TABLE |
SELECT | SELECT,INSERT...SELECT |
UPDATE | UPDATE |
DELETE | DELETE,REPLACE |
INSERT | INSERT,REPLACE,INSERT...SELECT |
SUPER | 管理端的语句, /!HotDB:dnid=?/ |
FILE | SELECT...INTO OUTFILE,LOAD DATA |
SUPER权限说明:
具有SUPER权限的user,可以登录计算节点的3325端口,可执行管理端的所有SQL语句;否则,不能登录管理端与执行管理端的SQL语句。
拥有SUPER权限的user,可在3323端口执行HINT语句。如:
/*!hotdb:dnid=1*/select * from table;
权限范围:
为计算节点数据库用户赋予权限时,除SUPER权限外,可指定user对逻辑库或表的操作权限。权限范围分为全局权限、逻辑库权限及表权限:
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表结构如下:
*.*
:所有库下的所有表;
db_name.*
:某库下的所有表,db_name为逻辑库名;
*.tbl_name
:所有库下的某张表,tbl_name为表名;
db_name.tbl_name
:某库下的某表;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的行的权限。
3.注意事项:
简介: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加密连接方式登录计算节点。
可参考官方文档生成自签名的秘钥。例如:可以用自带的命令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秘钥后,将相应的秘钥文件分别传输到计算节点服务端和客户端所在的服务器上,并在计算节点中按要求配置如下三个参数之后才能使用:
<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连接不受影响。
客户端方式
使用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中的同名文件,或者更新到更高的版本,参考链接。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。