本文介绍在 MQTT Dashboard 上创建客户端授权检查器的操作步骤。
使用 MySQL 作为数据源时,请先确保以下事项:
相关注意事项,请参见注意事项。
说明
在创建授权后,授权检查器默认处于启用状态。
内置数据库授权无需配置参数。
说明
在创建内置数据库授权后,您可通过 Dashboard 在内置数据库中配置授权规则,具体操作步骤,请参见配置内置数据库授权规则。
参数 | 说明 |
---|---|
服务 | 填写查询的 MySQL 实例的私网访问地址。 |
数据库 | 填写查询的数据库名称。 |
用户名 | 填写用户名。 注意 确保对应用户具备指定数据库的读写权限。 |
密码 | 填写密码。 |
启用 TLS | 配置是否启用 TLS 校验,以及是否校验服务器证书。如需校验,请分别配置 Cert 和 Key。 |
连接池大小 | 配置 MQTT 到指定 MySQL 数据库的并发连接数。默认值为 8,您可根据业务需求配置为其他整数值。 |
SQL | 根据表结构,填写查询 SQL 语句,具体要求请参见 SQL 表结构与查询语句。 |
MQTT 支持多种 MySQL 表结构、多个表结构联合查询,或者从视图中查询。您只需要提供一个查询的 SQL 模板,确保查询结果中包含以下字段:
字段 | 说明 |
---|---|
| 用于指定操作权限,取值如下:
|
| 用于指定当前规则适用的操作,取值如下:
|
| 用于指定当前规则适用的 Topic,支持使用主题过滤器或主题占位符。
|
| 用于指定规则适用的消息 QoS,取值可为 |
| 用于指定当前规则是否允许发布保留消息,取值如下:
若未指定 |
示例表结构
在指定数据库中创建如下表结构:
CREATE TABLE `mqtt_acl` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `permission` varchar(5) NOT NULL, `action` varchar(9) NOT NULL, `topic` varchar(100) NOT NULL, `qos` tinyint(1), `retain` tinyint(1), INDEX username_idx(username), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
说明
当系统中有大量权限数据时,请确保查询使用的表已优化并使用有效的索引,以提升大量连接时的数据查找速度、并降低 MQTT 负载。
添加规则内容
在表 mqtt_acl
中添加规则示例如下:
规则内容:用户名为 mqtt_u
,禁止发布到 t/1 主题。
INSERT INTO mqtt_acl(username, permission, action, topic) VALUES ('mqtt_u', 'deny', 'publish', 't/1');
规则内容:用户名为 mqtt_u
,禁止发布保留消息到 t/2 主题。
INSERT INTO mqtt_acl(username, permission, action, topic, retain) VALUES ('mqtt_u', 'deny', 'publish', 't/2', 1);
SQL 查询语句
以 {username}
作为查询条件,在表 mqtt_acl
中查询客户端权限信息的查询语句示例如下:
SELECT permission, action, topic, qos, retain FROM mqtt_acl WHERE username = ${username}