Самый безопасный удалённый доступ — через SSH-туннель. Прямой TCP/3306 разрешайте лишь приватной сети или конкретному адресу, с TLS и отдельным пользователем.
Важно: Никогда не используйте
'user'@'%' и публичное правило 3306 без сетевого ограничения и TLS.1. Вариант A: SSH-туннель
ssh -N -L 3307:127.0.0.1:3306 admin@db-server
mysql -h 127.0.0.1 -P 3307 -u appuser -p
2. Вариант B: ограниченное прослушивание
В конфигурации mysqld задайте приватный адрес сервера в bind-address, затем проверьте конфигурацию и перезапустите MySQL.
3. Создайте узкого пользователя
CREATE USER 'report'@'10.0.0.%' IDENTIFIED BY 'LONG_RANDOM_PASSWORD' REQUIRE SSL;
GRANT SELECT ON analytics.* TO 'report'@'10.0.0.%';
4. Ограничьте firewall
sudo ufw allow from 10.0.0.0/24 to any port 3306 proto tcp
sudo ufw status numbered