Jak udzielić zdalnego dostępu do MySQL dla całej podsieci?

93

Mogę łatwo przyznać dostęp do jednego adresu IP za pomocą tego kodu:

$ 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;

Ale muszę zezwolić całej podsieci 192.168.1. * Na zdalny dostęp do bazy danych.

Jak mogę to zrobić?

skystar7
źródło

Odpowiedzi:

100

EDYCJA: Zastanów się, czy przyjrzeć się odpowiedzi Malvineous i zagłosować za nią na tej stronie. Maski sieci są znacznie bardziej eleganckim rozwiązaniem.


Po prostu użyj znaku procentu jako symbolu wieloznacznego w adresie IP.

Od http://dev.mysql.com/doc/refman/5.1/en/grant.html

W nazwie hosta można określić symbole wieloznaczne. Na przykład user_name@'%.example.com'dotyczy user_namedowolnego hosta w example.comdomenie i user_name@'192.168.1.%'dotyczy user_namedowolnego hosta w 192.168.1podsieci klasy C.

p0lar_bear
źródło
6
Po prostu zrobiłem to w ten sposób, ale powiedzmy, co sprawia, że ​​nie ma to zastosowania do: nazwa_użytkownika@'192.168.1.my-hacked-rnds.killing.mysql.com '???? przejdę teraz dalej, ponieważ jest to MySQL, czuję, że nie chcę znać odpowiedzi.
Florian Heigl
+ Florian, wydaje mi się, że pokonuje to po prostu użycie „%”, ponieważ dodaje warstwę bezpieczeństwa, którą należy przezwyciężyć, ale myślę, że dobrze wskazałeś na jego słabość. Z pewnością uzupełniam tę konfigurację innymi środkami, takimi jak zablokowanie serwera bazy danych w oddzielnej podsieci, do której mogę kontrolować dostęp przez zaporę ogniową, aby między innymi zanegować Twoje obawy.
Josiah
22
Przykłady takie jak „192.168.1.my-hacked-rnds.killing.mysql.com” są szczegółowo omówione w dev.mysql.com/doc/refman/5.5/en/account-names.html : aby udaremnić takie próby, MySQL nie zezwala na dopasowywanie nazw hostów zaczynających się od cyfr i kropki. ... Wartość symbolu wieloznacznego IP może pasować tylko do adresów IP, a nie do nazw hostów.
Stefan Lasiewski
118

To wygląda można również użyć maski sieci , np

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
Malvineous
źródło
7
To powinna być akceptowana odpowiedź, ponieważ jest jedyną poprawną technicznie. Obsługiwane od co najmniej 5.5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter
6
Nie próbuj używać notacji CIDR, takiej jak „172.16.0.0/16”, to nie działa. Zawsze używaj pełnej maski sieci.
Oliver R.
Wygląda na to, że musisz użyć pierwszego adresu IP z zakresu; Na przykład użycie 192.168.0.34/255.255.255.0 nie powiedzie się!
Sander
@SanderBackus: 192.160.0.34/255.255.255.0to to samo, 192.168.0.34/24co nie ma sensu ( /24oznacza, że ​​ostatnia liczba może wynosić od 0 do 255, ignorując twoją wartość 34). Czy to działa, jeśli używasz prawidłowej maski adresu IP, na przykład 192.168.0.34/255.255.255.252?
Malvineous
@Malvineous To był mój punkt widzenia. Jeśli używasz 192.160.0.34/255.255.255.0, mysql nie zezwala na 192.160.0.34. Chciałem zezwolić na pełne / 24 (tak, użyłem pełnej maski sieci, zgodnie z dokumentacją), ale najwyraźniej jeśli musisz użyć 192.160.0.0/255.255.255.0, aby zezwolić na pełny zakres.
Sander
28

Możesz użyć „%” jako symbolu wieloznacznego w następujący sposób:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
Mike Brant
źródło
12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

Znak wieloznaczny to „%” zamiast „*”

David Allen
źródło
5

Tylko uwaga o osobliwości, z którą się spotkałem:
Rozważ:

db server:  192.168.0.101
web server: 192.168.0.102

Jeśli masz użytkownika zdefiniowanego w mysql.user jako hasło1 'user'@'192.168.0.102'i innego 'user'@'192.168.0.%'z hasłem2,

następnie,

jeśli próbujesz połączyć się z serwerem db z serwera WWW jako „użytkownik” z hasłem2,

spowoduje to błąd „Odmowa dostępu”, ponieważ 'user'@'192.168.0.102'uwierzytelnianie pojedynczego adresu IP jest używane zamiast 'user'@'192.168.0.%'uwierzytelniania za pomocą symboli wieloznacznych .

site80443
źródło
2
Nie jestem pewien, czy to odpowiedź na pytanie. Jeśli nie zawiera bezpośredniej odpowiedzi na pierwotne pytanie, powinien zostać opublikowany jako komentarz.
Kmeixner
13
Kmeixner, spodziewasz się, że napisze tak dużo w komentarzu? Zastosuj zdrowy rozsądek i przestań być robotem. Ta społeczność pomaga programistom nie utrudniać im życia.
user1735921
0

po podłączeniu serwera i chcesz się połączyć na swoim hoście, wykonaj poniższe czynności:

  1. napisz mysql, aby otworzyć mysql
  2. pisać ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. naciśnij control i X, aby wyjść z mysql
  4. pisać nano /etc/mysql/my.cnf
  5. napisz # przed bind-address = 127.0.0.1 w folderze my.cnf
  6. # bind-address = 127.0.0.1
  7. zapisz folder my.cnf za pomocą control + X
  8. pisać service mysql restart
  9. możesz połączyć się przez navicat na hoście
murat delen
źródło
0

Zmotywowany odpowiedzią @Malvineaus, wypróbowałem to samodzielnie i zauważyłem, że nie działa na mnie.

Możesz określić maski podsieci za pomocą „192.168.1.%” Lub „192.168.1.0/255.255.255.0”, ale podsieć musi zawsze obejmować pełne oktety. zobacz https://mariadb.com/kb/en/create-user/#host-name-component . W rezultacie funkcjonalność między jednym a drugim sposobem specyfikacji jest taka sama.

Na przykład „192.168.1.0/255.255.255.128” nie będzie działać, ponieważ nie znajduje się na pełnej granicy oktetu.

Patric
źródło