Ситуация что необходимо доступ ко всем базам данных извне. Пусть даже с определенного IP. Что нужно для этого сделать:
- Создать пользователя
- Добавить пользователю необходимые права
- Дать доступ к определенному порту извне в MySQL и в системе
1. Создать пользователя 2. Добавить пользователю необходимые права
Заходим в mysql из под root и создаем пользователя с полными правами.
GRANT ALL ON fooDatabase.* TO 'fooUser'@'1.2.3.4' IDENTIFIED BY 'my_password';
У созданного fooUser будут ВСЕ права. А доступ будет разрешен только с ip 1.2.3.4
с пароем my_password
Отозвать все права у пользователя можно командой
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'fooUser'@'1.2.3.4';
Удалить пользователя можно командой:
DROP USER 'bloguser'@'localhost';
3.1. Доступы к MySQL
основная проблема часто бывает в том, что сам MySQL сервис блокирует доступ извне. Правится это в конфигурации сервера
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
ищем фразу bind-address
и комментируем эту строку
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
перезапускаем mysql
sudo service mysql restart
По идее теперь уже должно заработать. Но бывает что ещё необходимо добавить в разрешенные порты в ufw.
3.2. Проверяем firewall UFW
UFW — фаервол для Linux. Он может блокировать доступ к определенным портам. Поэтому неообходмо открыть порт 3306. Сделать это можно по аналогии с добавлением доступа к SSH.
Allow SSH
sudo ufw allow ssh
sudo ufw allow 22
Вход только с определенного IP
sudo ufw allow from 15.15.15.0/24 to any port 22
Источники:
- Create MySQL Database, Table & User From Command Line Guide
- Как создать нового пользователя и настроить права доступа в MySQL
- Как правильно удалить пользователя MySQL/MariaDB
- Can\’t Connect to MySQL Server Remotely on Ubuntu
- UFW Essentials: Common Firewall Rules and Commands
- How To Set Up a Firewall with UFW on Ubuntu 16.04