EMQX--数据库认证(加盐)

EMQX 企业版技术支持发表于:2022年05月25日 10:18:10

这里以MySQL认证为例,其他数据库认证同理即可:

一、安装MySQL

以docker为例:

拉取 MySQL 镜像

这里我们拉取官方的最新版本的镜像:

$ docker pull mysql:latest

运行容器:

$ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。

  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

二、创建模块

打开 EMQX Dashboard (opens new window),点击左侧的 “模块” 选项卡,选择添加:

image-20220407101533073.png

需要配置MySQL的地址,用户名,密码(可选)等基本连接参数表,这里我加密方式我以sha256+salt为例:

image-20220407102412421.pngimage-20220407102412421

注:加盐规则,默认在用户名/密码SQL认证语句中是没有的,需自己添加进去!!!

最后点击“添加”按钮,模块即可添加成功:image-20220407103030058

image-20220407103030058.png

三、创建认证表

##创建数据库
create database mqtt; 
##切换数据库
use mqtt; 
##创建认证表
CREATE TABLE `mqtt_user` (  
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `salt` varchar(35) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

image-20220407104129660image-20220407104129660.png

插入一条示例数据如下:image-20220407104741985

image-20220407104741985.png

其中password是由密码public加上salt为test拼接在一起的字符串为publictest进行sha256加密得到的,如图:

image-20220407105405826image-20220407105405826.png

验证

启用 MySQL 认证后,你可以通过用户名: emqx,密码:public 连接。image-20220407105515343

image-20220407105515343.png


    您需要登录后才可以回复