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.