Как предоставить удаленный доступ к 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 ...

После того, как вы подключите сервер и хотите подключиться к своему хосту, вы должны выполнить следующие шаги:

  1. напишите mysql, чтобы открыть mysql
  2. записывать GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect';
  3. нажмите Control и X, чтобы выйти из mysql
  4. записывать nano /etc/mysql/my.cnf
  5. напишите # перед bind-address = 127.0.0.1 в папке my.cnf
  6. # адрес привязки = 127.0.0.1
  7. сохраните папку my.cnf с помощью Ctrl + X
  8. записывать service mysql restart
  9. вы можете подключиться через навигатор на вашем хосте
Другие вопросы по тегам