1 线上使用建议关闭 匿名登陆
打开安装目录下的\etc\emqx.conf文件
修改 allow_anonymous = false
重启 emq ,即可
emqx restart
2 修改mysql认证插件的配置文件 /etc/plugins/emqx_auth_mysql.conf
## 核心配置如下
## 服务器地址
auth.mysql.server = 127.0.0.1:3306
## 连接池大小
auth.mysql.pool = 8
auth.mysql.username = root
auth.mysql.password = 123456
auth.mysql.database = mqtt
auth.mysql.query_timeout = 5s
3 配置 加盐规则与哈希方法 [可选],默认是sha256
## Password hash.
##
## Value: plain | md5 | sha | sha256 | bcrypt
auth.mysql.password_hash = md5,salt
4 认证 SQL(auth_query)[可选],设置了加盐等,必须操作
进行身份认证时,EMQ X 将使用当前客户端信息填充并执行用户配置的认证 SQL,查询出该客户端在数据库中的认证数据。
auth.mysql.auth_query = select password,salt from mqtt_user where username = '%u' limit 1
你可以在认证 SQL 中使用以下占位符,执行时 EMQ X 将自动填充为客户端信息:
- %u:用户名
- %c:Client ID
- %C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效
- %d:TLS 证书 subject,仅当 TLS 连接时有效
你可以根据业务需要调整认证 SQL,如添加多个查询条件、使用数据库预处理函数,以实现更多业务相关的功能。但是任何情况下认证 SQL 需要满足以下条件:
- 查询结果中必须包含 password 字段,EMQ X 使用该字段与客户端密码比对
- 如果启用了加盐配置,查询结果中必须包含 salt 字段,EMQ X 使用该字段作为 salt(盐)值
- 查询结果只能有一条,多条结果时只取第一条作为有效数据
5 创建库和表,认证/超级用户表
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;