EMQ X 基于 MySQL 的 MQTT 连接认证2020-12-28 12:52:52
创建数据库
你可以使用任何自己喜欢的 客户端,创建好相应的数据库。这里用的是 MySQL 自带的命令行客户端,打开 MySQL 的控制台,如下所示,创建一个名为 emqx 的认证数据库,并切换到 emqx 数据库。mysql> create database emqx;
Query OK, 1 row affected (0.00 sec)
mysql> use emqx;
Database changed创建表
建议的表结构如下,其中,username 为客户端连接的时候指定的用户名,此处的值如果设置为 $all 表示该规则适用于所有的用户password 为使用 salt 加密后的密文salt 为加密串is_superuser 是否为超级用户,用于控制 ACL,缺省为0;设置成 1 的时候为超级用户,可以跳过 ACL 检查数据表字段可以不用完全跟下面的一致,可以根据业务需要设置,通过 `emqx_auth_mysql.conf` 配置文件中的 `auth_query` 配置项来指定。
认证表: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;
进行身份认证时,EMQ X 将使用当前客户端信息填充并执行用户配置的认证 SQL,查询出该客户端在数据库中的认证数据。select password from mqtt_user where username = '%u' limit 1
字段说明%u:用户名%c:clientid%P:明文密码%C:TLS 证书公用名(证书的域名或子