Skip to content

MySQL 授权

扩展授权支持通过集成 MySQL 进行授权验证。

表结构与查询语句

MySQL 授权器可以支持任何表结构,甚至是多个表联合查询、或从视图中查询。用户需要提供一个查询 SQL 模板,且确保查询结果包含以下字段:

  • permission: 用于指定操作权限,可选值有 allowdeny
  • action: 用于指定当前规则适用于哪些操作,可选值有 publishsubscribeall
  • topic: 用于指定当前规则适用的主题,可以使用主题过滤器和主题占位符。
  • qos: (可选)用于指定规则适用的消息 QoS,可选值为 012,也可以用 , 分隔的字符串指定多个 QoS,例如 0,1。默认为全部 QoS。
  • retain: (可选)用于指定当前规则是否支持发布保留消息,可选值有 01,默认允许保留消息。

示例表结构:

SQL
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;

TIP

当系统中有大量权限数据时,请确保查询使用的表已优化并使用有效的索引,以提升大量连接时的数据查找速度、并降低 EMQX 负载。

查询语句

在 EMQX 中配置以下查询参数,使用 mqtt_acl 表并以 username 作为查找条件,查询出权限数据。

SQL
SELECT 
  permission, action, topic, qos, retain 
FROM mqtt_acl 
  WHERE username = ${username}

配置 MySQL 授权

在部署中点击 访问控制 -> 授权 -> 扩展授权,选择 MySQL 授权,点击配置授权

您可按照如下说明完成相关配置:

  • 服务:填入 MySQL 服务器地址 (host:port) 。
  • 数据库:填入 MySQL 的数据库名称。
  • 用户名(可选):填入用户名称。
  • 密码(可选):填入用户密码。
  • 启用 TLS:配置是否启用 TLS。
  • SQL:根据表结构填入查询 SQL,具体要求见 SQL 表结构与查询语句

TIP

  • 如果当前部署为专有版,需创建 VPC 对等连接,服务器地址填写内网地址。
  • 如果当前部署为 BYOC 版,需在您的公有云控制台中创建 VPC 对等连接,具体请参考 创建 BYOC 部署 - VPC 对等连接配置 章节。服务器地址填写内网地址。
  • 若提示 Init resource failure! 请检查服务器地址是否无误、安全组是否开启。