Как предоставить удаленный доступ к MySQL для всей подсети?

93

Я могу легко предоставить доступ к одному 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. * Удаленный доступ к базе данных.

Как я могу это сделать?

Skystar7
источник

Ответы:

100

РЕДАКТИРОВАТЬ: подумайте о том, чтобы посмотреть и проголосовать за ответ Малвинос на этой странице. Сетевая маска - гораздо более элегантное решение.


Просто используйте знак процента в качестве подстановочного знака в 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.

p0lar_bear
источник
6
Я просто так сделал, но, скажем, почему это не применимо к: user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? Теперь я пойду дальше, поскольку это MySQL, я чувствую, что не хочу знать ответ.
Флориан Хейгл,
+ Флориан, я полагаю, что это лучше, чем просто использование "%", поскольку оно добавляет уровень безопасности, который необходимо преодолеть, но я думаю, что вы хорошо заметили его слабость. Я, конечно, дополняю эту конфигурацию другими средствами, такими как блокировка сервера базы данных в отдельной подсети, доступ к которой я могу контролировать через брандмауэр, среди прочего, чтобы снять ваши опасения.
Джозия
22
Примеры вроде «192.168.1.my-hacked-rnds.killing.mysql.com» специально рассматриваются в dev.mysql.com/doc/refman/5.5/en/account-names.html : Чтобы предотвратить такие попытки, MySQL запрещает сопоставление имен хостов, начинающихся с цифр и точки. ... Подстановочное значение IP может соответствовать только IP-адресам, но не именам хостов.
Стефан Ласевски
118

Это выглядит , как вы можете также использовать маску подсети , например ,

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
Мальвинский
источник
7
Это должен быть принятый ответ, поскольку он является единственно правильным с технической точки зрения. Поддерживается как минимум с
версии
6
Не пытайтесь использовать нотацию CIDR, например «172.16.0.0/16», это не сработает. Всегда используйте полную сетевую маску.
Оливер Р.
Похоже, вам нужно использовать первый IP-адрес в диапазоне; Использование, например, 192.168.0.34/255.255.255.0 приведет к ошибке!
Sander
@SanderBackus: 192.160.0.34/255.255.255.0то же самое, 192.168.0.34/24что на самом деле не имеет смысла ( /24означает, что последнее число может быть от 0 до 255, игнорируя ваше значение 34). Это работает, если вы используете действительную маску для IP, например 192.168.0.34/255.255.255.252?
Malvineous 02
@Malvineous Это была моя точка зрения. Если вы используете 192.160.0.34/255.255.255.0, mysql не разрешает 192.160.0.34. Я хотел разрешить полный / 24 (да, я использовал полную сетевую маску, как описано в документации), но, очевидно, если вам нужно использовать 192.160.0.0/255.255.255.0, чтобы разрешить полный диапазон.
Sander
28

Вы бы просто использовали '%' в качестве подстановочного знака, например:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
Майк Брант
источник
12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

Подстановочный знак - "%" вместо "*".

Дэвид Аллен
источник
5

Просто обратите внимание на особенность, с которой я столкнулся
:

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,

тогда,

если вы попытаетесь подключиться к серверу db с веб-сервера как «пользователь» с паролем2,

это приведет к ошибке «Доступ запрещен», поскольку 'user'@'192.168.0.102'аутентификация с одним IP-адресом используется вместо 'user'@'192.168.0.%'аутентификации с использованием подстановочных знаков .

site80443
источник
2
Я не уверен, что это ответ на вопрос. Если он не дает прямого ответа на исходный вопрос, его следует опубликовать в качестве комментария.
Kmeixner 02
13
Кмейкснер, вы ожидаете, что он так много напишет в комментарии? Примените здравый смысл и перестаньте быть роботом. Это сообщество создано для того, чтобы помочь разработчикам не усложнять себе жизнь.
user1735921
0

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

  1. напишите mysql, чтобы открыть mysql
  2. написать ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. нажмите Ctrl и 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. вы можете подключиться через навигатор на вашем хосте
Мурат Делен
источник
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» не будет работать, так как он находится не на полной границе октета.

Патрик
источник