Как предоставить удаленный доступ к MySQL для всей подсети?
Я могу легко предоставить доступ к одному IP с помощью этого кода:
$ mysql -u root -p
Enter password:
mysql> use mysql
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';
mysql> FLUSH PRIVILEGES;
Но мне нужно разрешить всей подсети 192.168.1.* Получить удаленный доступ к базе данных.
Как я могу это сделать?
8 ответов
РЕДАКТИРОВАТЬ: Подумайте над тем, чтобы взглянуть на ответ Мальвинуса на этой странице. Маски сети - гораздо более элегантное решение.
Просто используйте знак процента в качестве подстановочного знака в IP-адресе.
С http://dev.mysql.com/doc/refman/5.1/en/grant.html
Вы можете указать подстановочные знаки в имени хоста. Например,
user_name@'%.example.com'
относится кuser_name
для любого хоста вexample.com
домен иuser_name@'192.168.1.%'
относится кuser_name
для любого хоста в192.168.1
подсеть класса C.
Похоже, вы также можете использовать маску, например,
GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
Вы бы просто использовали "%" в качестве своего шаблона:
GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
Подстановочный знак представляет собой "%" вместо "*"
Просто заметка о странности, с которой я столкнулся:
Рассматривать:
db server: 192.168.0.101
web server: 192.168.0.102
Если у вас есть пользователь, определенный в mysql.user как 'user'@'192.168.0.102'
с паролем1 и другим 'user'@'192.168.0.%'
с паролем2,
затем,
если вы попытаетесь подключиться к серверу БД с веб-сервера как "пользователь" с паролем2,
это приведет к ошибке "Отказано в доступе", потому что один IP 'user'@'192.168.0.102'
проверка подлинности используется с подстановочным знаком 'user'@'192.168.0.%'
аутентификация.
Мотивированный ответом @Malvineaus, я попробовал сам и заметил, что у меня это не сработало.
Вы можете указать маски подсети с помощью "192.168.1.%" Или "192.168.1.0/255.255.255.0", но подсеть всегда должна содержать полные октеты. см. https://mariadb.com/kb/en/create-user/#host-name-component. В результате функциональность между одним способом спецификации и другим одинакова.
Например, "192.168.1.0/255.255.255.128" не будет работать, так как он находится не на полной границе октета.
MySQL 8.0.23 и более поздние версии теперь также поддерживают нотацию CIDR.
Итак, в основном:
-- CIDR Notation
GRANT ... TO 'user'@'192.168.1.0/24' IDENTIFIED BY ...
-- Netmask Notation
GRANT ... TO 'user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY ...
После того, как вы подключите сервер и хотите подключиться к своему хосту, вы должны выполнить следующие шаги:
- напишите mysql, чтобы открыть mysql
- записывать
GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
; - нажмите Control и X, чтобы выйти из mysql
- записывать
nano /etc/mysql/my.cnf
- напишите # перед bind-address = 127.0.0.1 в папке my.cnf
- # адрес привязки = 127.0.0.1
- сохраните папку my.cnf с помощью Ctrl + X
- записывать
service mysql restart
- вы можете подключиться через навигатор на вашем хосте