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

Як я можу це зробити?

Відповіді:


100

РЕДАГУВАТИ: розгляньте та проголосуйте відповідь Malvineous на цій сторінці. Мережеві маски - набагато більш елегантне рішення.


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


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-адресами, а не з іменами хостів.
Stefan Lasiewski

118

Це виглядає , як ви можете також використовувати маску підмережі , наприклад ,

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
Це повинна бути прийнята відповідь, оскільки вона є єдиною технічно правильною. Підтримується принаймні з 5,5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
Не намагайтеся використовувати позначення CIDR, як "172.16.0.0/16", це не працює. Завжди використовуйте повну маску мережі.
Олівер Р.

Здається, вам потрібно використовувати першу IP-адресу в діапазоні; Використання, наприклад, 192.168.0.34/255.255.255.0 не вдасться!
Сандер

@SanderBackus: 192.160.0.34/255.255.255.0це те саме, 192.168.0.34/24що насправді не має сенсу ( /24означає, що останнє число може бути від 0 до 255, ігноруючи ваше значення 34). Чи працює це, якщо ви використовуєте дійсну маску для ІР, наприклад 192.168.0.34/255.255.255.252?
Malvineous

@Malvineous Це була моя думка. Якщо ви використовуєте 192.160.0.34/255.255.255.0, mysql не дозволяє 192.160.0.34. Я мав на увазі дозволити повну / 24 (так, я використовував повну маску мережі, як це задокументовано), але, мабуть, якщо вам потрібно використовувати 192.160.0.0/255.255.255.0, щоб дозволити повний діапазон.
Сандер

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 як пароль1 'user'@'192.168.0.102'та інший'user'@'192.168.0.%' із паролем2,

тоді,

якщо ви намагаєтесь підключитися до сервера db з веб-сервера як "користувач" за допомогою пароля2,

це призведе до помилки "Доступ заборонено", оскільки одна 'user'@'192.168.0.102'аутентифікація IP використовується над 'user'@'192.168.0.%'автентифікацією підстановки .


2
Я не впевнений, що це відповідь на запитання. Якщо він не дає прямої відповіді на вихідне запитання, його слід опублікувати як коментар.
Кмейкснер

13
Кмейкснер, ти очікуєш, що він так багато напише у коментарі? Застосуйте якийсь здоровий глузд і перестаньте бути роботом. Ця спільнота допомагає розробникам не ускладнювати своє життя.
user1735921

0

після того, як ви підключите сервер і хочете підключитися на своєму хості, вам слід виконати наведені нижче дії:

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

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' не буде працювати, оскільки він не знаходиться на повній межі октету.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.