Implementando Autenticação de Clientes EMQX via MySQL

Configuração do Ambiente MySQL para EMQX

Este guia detalha o processo de configuração da autetnicação de clientes para o broker EMQX utilizando um banco de dados MySQL. Para iniciar, certifique-se de que o servidor MySQL esteja instalado e acessível, com a porta 3306 configurada para conexões. O processo de instalação do MySQL não será abordado aqui.

Acesse o console MySQL com um usuário privilegiado (por exemplo, root) utilizando o seguinte comando:

mysql -u root -p

No prompt mysql>, execute as seguintes instruções SQL sequencialmente para configurar o ambiente necessário:

-- 1. Cria um novo banco de dados dedicado à autenticação do EMQX.
CREATE DATABASE emqx_auth_db;

-- 2. Define um novo usuário 'emqx_user' com uma senha forte.
--    Lembre-se de substituir 'EmqxUserPassword123!' por uma senha segura de sua escolha.
CREATE USER 'emqx_user'@'%' IDENTIFIED BY 'EmqxUserPassword123!';

-- 3. Concede ao 'emqx_user' permissões completas sobre o banco de dados 'emqx_auth_db'.
GRANT ALL PRIVILEGES ON emqx_auth_db.* TO 'emqx_user'@'%';

-- 4. Atualiza os privilégios do MySQL para que as alterações tenham efeito imediato.
FLUSH PRIVILEGES;

-- 5. Alterna para o banco de dados recém-criado 'emqx_auth_db'.
USE emqx_auth_db;

-- 6. Cria a tabela 'mqtt_user' para armazenar as credenciais dos clientes MQTT.
--    Esta estrutura de tabela é essencial para a compatibilidade com o EMQX.
CREATE TABLE `mqtt_user` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(100) UNIQUE NOT NULL,
  `password_hash` VARCHAR(255) NOT NULL,
  `salt` VARCHAR(40),
  `is_superuser` TINYINT DEFAULT 0
);

-- 7. Sai do console MySQL.
exit

É importante notar que o campo password_hash destina-se a armazenar a senha já criptografada (hash), e não a senha em texto claro fornecida pelo usuário. O campo salt é para casos onde o método de "salting" de senhas é utilizado, mas neste exemplo, ele será desabilitado no EMQX.

Configuração do Autenticador no Painel do EMQX

Acesse o painel de controle do EMQX (Dashboard). No menu lateral esquerdo, navegue até a seção de Autenticação de Clientes. Clique em "Criar" e, em seguida, selecione a opção de autenticação "Baseada em Senha".

Entre as opções disponíveis para o tipo de autenticador, escolha "MySQL". (Se esta opção estiver desabilitada, pode indicar que um autenticador MySQL já foi configurado).

Na página de configuração do autenticador MySQL, preencha os detalhes conforme o ambiente do seu banco de dados:

  • Nome do Banco de Dados: emqx_auth_db
  • Usuário: emqx_user
  • Senha: EmqxUserPassword123! (substitua pela senha que você definiu)

Para o método de salt (Salting Method), selecione Desativado (Disable).

No campo destinado à Consulta SQL, insira a seguinte instrução. É crucial que esta query seja idêntica para garantir a compatibilidade com o esquema de autenticação do EMQX, pois ela busca o hash da senha, o salt e o status de superusuário com base no nome de usuário fornecido:

SELECT password_hash, salt, is_superuser FROM mqtt_user WHERE username = ${username} LIMIT 1

Revise todas as configurações e, em seguida, clique no botão "Criar". Após a criação bem-sucedida, o novo autenticador MySQL aparecerá na lista de autenticações com o status "Coenctado".

Adição e Verificação de Usuário de Teste

Para adicionar um usuário de teste, acesse novamente o console MySQL, desta vez utilizando o usuário emqx_user que criamos:

mysql -u emqx_user -p emqx_auth_db

Após inserir a senha, execute a seguinte instrução para adicionar um novo cliente MQTT à tabela mqtt_user:

INSERT INTO `mqtt_user` (`username`, `password_hash`)
VALUES ('test_client', 'efa1f375d76194fa51a3556a97e641e61685f914d446979da50a551a4333ffd7');

Esta instrução adiciona um usuário chamado test_client com a senha public. O valor efa1f375d76194fa51a3556a97e641e61685f914d446979da50a551a4333ffd7 é o hash SHA256 da palavra 'public', gerado previamente.

Para verificar se o usuário foi inserido corretamente, execute a seguinte consulta:

SELECT * FROM mqtt_user;

A saída da consulta deve confirmar a presença do novo usuário no banco de dados, com o campo salt como NULL, o que corresponde à configuração de 'Desativado' para o método de salt no Dashboard do EMQX.

Utilize um cliente MQTT, como o MQTTX, para testar a conexão. Configure os detalhes de conexão da seguinte forma:

  • Host: O endereço IP público do seu servidor EMQX.
  • Username: test_client
  • Password: public

Ao tentar conectar, a conexão deve ser estabelecida com sucesso, confirmando a correta configuração da autenticação MySQL no EMQX.

Tags: EMQX MQTT MySQL autenticacao IoT

Publicado em 6-15 21:49 por Thomas