przyznać zdalny dostęp do bazy danych MySQL z dowolnego adresu IP

280

Mam świadomość tego polecenia:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Ale wtedy pozwala mi tylko nadać określony adres IP, aby uzyskać dostęp do tej zdalnej bazy danych MySQL. Co jeśli chcę, aby każdy zdalny host mógł uzyskać dostęp do tej bazy danych MySQL? W jaki sposób mogę to zrobić? Zasadniczo upubliczniam tę bazę danych, aby każdy mógł uzyskać do niej dostęp.

sztolnia
źródło
1
Zanim to zrobisz, rozważ konsekwencje dla bezpieczeństwa
e18r
7
nie każdy system jest systemem produkcyjnym. niektórzy ludzie potrzebują tego do rozwoju.
Conrad Jones,

Odpowiedzi:

272
TO 'user'@'%'

% jest symbolem wieloznacznym - możesz także zrobić '%.domain.com'lub '%.123.123.123'i coś takiego, jeśli potrzebujesz.

Ariel
źródło
@kristopolous Istnieje wiele rzeczy, które mogą to powodować. To polecenie dotyczy dostępu zdalnego (dwa różne komputery). Jeśli nie to robisz, nie jest to właściwe polecenie. Nadal potrzebujesz poprawnego hasła i innych rzeczy.
Ariel,
11
Musisz użyć „uprawnień do opróżniania”; aby zmiany weszły w życie
Didier Sampaolo,
Sztuką podczas łączenia się z instancją db działającą na tej samej instancji systemu operacyjnego (np. Na komputerze dewelopera) jest przekazanie -h my_machine_nameparametru. To powoduje, że klient identyfikuje cię 'user'@my_machine_name.example.comraczej niż 'user'@localhost. W ten sposób nie musisz tworzyć i utrzymywać podwójnych kont i dotacji zarówno dla localhostdostępu do sieci, jak i dla niej. I, oczywiście, być pewny mysqldjest związany 0.0.0.0vs. 127.0.0.1.
Charlie Reitzel,
173

Enable Remote Access (Grant) Home / Tutorials / Mysql / Enable Remote Access (Grant) Jeśli spróbujesz połączyć się z serwerem mysql ze zdalnego komputera i napotkasz błąd jak poniżej, ten artykuł jest dla Ciebie.

BŁĄD 1130 (HY000): Host „1.2.3.4” nie może połączyć się z tym serwerem MySQL

Zmień konfigurację mysql

Zacznij od edycji pliku konfiguracyjnego mysql

vim /etc/mysql/my.cnf

Skomentuj następujące wiersze.

#bind-address           = 127.0.0.1
#skip-networking

Jeśli nie znajdziesz linii pomijania sieci, dodaj ją i skomentuj.

Uruchom ponownie serwer mysql.

~ /etc/init.d/mysql restart

Zmień uprawnienie GRANT

Możesz być zaskoczony, gdy nawet po powyższej zmianie nie otrzymujesz dostępu zdalnego lub dostępu, ale nie możesz uzyskać dostępu do wszystkich baz danych.

Domyślnie używana nazwa użytkownika i hasło mysql ma dostęp do lokalnego serwera mysql. Więc musisz zaktualizować uprawnienia.

Uruchom polecenie jak poniżej, aby uzyskać dostęp ze wszystkich komputerów. (Zamień USERNAMEi za PASSWORDpomocą poświadczeń.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Uruchom polecenie jak poniżej, aby uzyskać dostęp z określonego adresu IP. (Zamień USERNAMEi za PASSWORDpomocą poświadczeń.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Możesz zastąpić 1.2.3.4 swoim adresem IP. Możesz uruchomić powyższą komendę wiele razy, aby UZYSKAĆ ​​dostęp z wielu adresów IP.

Możesz także określić oddzielny USERNAMEi PASSWORDzdalny dostęp.

Możesz sprawdzić końcowy wynik:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Wreszcie może być konieczne uruchomienie:

mysql> FLUSH PRIVILEGES;

Testuj połączenie

Z terminala / wiersza poleceń:

mysql -h HOST -u USERNAME -pPASSWORD

Jeśli otrzymasz powłokę mysql, nie zapomnij uruchomić baz danych show; aby sprawdzić, czy masz odpowiednie uprawnienia ze zdalnych komputerów.

Porada dodatkowa: Odwołaj dostęp

Jeśli przypadkowo przyznasz dostęp użytkownikowi, lepiej skorzystaj z opcji odwołania.

Poniższe unieważnią wszystkie opcje dla USERNAME ze wszystkich komputerów:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Jeśli widzisz uprawnienie USAGE po uruchomieniu polecenia REVOKE, jest w porządku. Jest tak dobry, jak żaden przywilej. Nie jestem pewien, czy można go odwołać.

Siddharth Kumar
źródło
7
Zauważ, że musiałem zmienić /etc/mysql/mysql.conf.d/mysqld.cnfplik zamiast /etc/mysql/my.cnfkomentować bind-addressczęść. #skip-networkingBrakuje linii i nie powinno być skutkiem dodawania i komentowania linię.
Pawan
1
W przypadku MariaDB 10.1.26 plik konfiguracyjny to/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz
Jeśli wykonałeś wszystkie powyższe czynności i nadal nie możesz się połączyć, sprawdź ustawienia zapory, być może blokuje port 3306lub
inny
37

Zakładając, że powyższy krok został zakończony, a do portu MySql 3306 można uzyskać zdalny dostęp; Nie zapomnij powiązać publicznego adresu IP w pliku konfiguracyjnym mysql.

Na przykład na moim serwerze ubuntu:

#nano /etc/mysql/my.cnf

W pliku wyszukaj blok sekcji [mysqld] i dodaj nowy adres powiązania, w tym przykładzie jest to 192.168.0.116. Wyglądałoby to mniej więcej tak

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

możesz usunąć powiązanie localhost (127.0.0.1), jeśli chcesz, ale musisz podać adres IP, aby uzyskać dostęp do serwera na komputerze lokalnym.

Ostatnim krokiem jest zrestartowanie serwera MySql (na Ubuntu)

stop mysql

start mysql

lub #/etc/init.d/mysql restartdla innych systemów

Teraz do bazy danych MySQL można uzyskać zdalny dostęp poprzez:

mysql -u username -h 192.168.0.116 -p
Waqas
źródło
/etc/init.d/mysql reloadpowinno wystarczyć
Lorenz Lo Sauer
Właśnie to zrobiłem i nie mogłem połączyć się zdalnie z serwerem mysql. Następnie spróbowałem skomentować adresy powiązań i zadziałało. Próbowałem także zalogować się do serwera za pomocą mysql -u <użytkownik> -p bez określania hosta i zadziałało, więc wygląda na to, że „możesz usunąć powiązanie localhost (127.0.0.1), jeśli chcesz, ale musisz to zrobić podaj adres IP, aby uzyskać dostęp do serwera na komputerze lokalnym. ” nie jest poprawne. (Ubuntu 12.04 LTS server mysql Ver 14.14 Distrib 5.5.34)
Programster
5
bind-addressDyrektywa określa adres IP, który MySQL server Słuchacze na; nie adresy IP, z których serwer akceptuje połączenia.
GoZoner,
1
Po wykonaniu każdego kroku nie działa. Podczas komentowania bind-addressadresu localhost lub remotehost pojawia się błąd . mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
baermathias,
Czy możliwe jest podanie adresu takiego jak abc.abc:1234 zamiast 192.168.0.116?
bielas
26

Dla każdego, kto brał się z tym, oto, jak mam przyznać przywileje, mam nadzieję, że to komuś pomoże

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Jak wspomniano, %jest to symbol wieloznaczny, który pozwoli dowolnemu adresowi IP połączyć się z bazą danych. Zakładam, że tutaj, kiedy się połączysz, będziesz mieć nazwę użytkownika root(który jest domyślny). Wprowadź hasło roota i gotowe. Zauważ, że nie mam pojedynczych cudzysłowów ( ') wokół katalogu głównego użytkownika.

Dev
źródło
Dlaczego usuwanie pojedynczych cudzysłowów od użytkownika jest ważne? Dlaczego różni się to od innych odpowiedzi (i instrukcji)?
DMCoding
26

Zmiany plików konfiguracyjnych są wymagane, aby umożliwić połączenia za pośrednictwem hosta lokalnego.

Aby połączyć się przez zdalne adresy IP, zaloguj się jako użytkownik „root” i uruchom poniższe zapytania w mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Spowoduje to utworzenie nowego użytkownika, który będzie dostępny na localhost, a także ze zdalnych adresów IP.

Skomentuj również poniższy wiersz z pliku my.cnf znajdującego się w /etc/mysql/my.cnf

bind-address = 127.0.0.1

Uruchom ponownie mysql za pomocą

sudo service mysql restart

Teraz powinieneś być w stanie połączyć się zdalnie z mySQL.

harishannam
źródło
2
To nie odpowiada na pytanie.
CHarris,
1
@ChristopheHarris, dlaczego tak się czujesz? Odpowiedź wyraźnie podaje instrukcje krok po kroku, jak utworzyć nowego użytkownika w MySQL, który umożliwia zarówno localhost, jak i zdalny dostęp do bazy danych za pomocą tego użytkownika. Czy potrafisz wyjaśnić?
harishannam
1
Nie działa dla mnie. Nadal występuje ten sam błąd. Bez względu na to, czy spróbuję z rootem czy nowym użytkownikiem: Nie mogę połączyć się z serwerem MySQL na 'xxx.xxx.xxx.xxx' ([Errno 61] Odmowa połączenia)
baermathias
21

Użyj tego polecenia:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Następnie:

FLUSH PRIVILEGES; 

Następnie skomentuj poniższy wiersz w pliku „/etc/mysql/mysql.conf.d/mysqld.cnf” (jest wymagany!):

bind-address = 127.0.0.1 

Pracuje dla mnie!

Tomasz Czechowski
źródło
Bardzo dobry. Ważne dotacja. Jeśli nie, wiele błędów w przypadku zapytań takich jakyour-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz
21

Aby móc połączyć się z użytkownikiem z dowolnego adresu IP, wykonaj następujące czynności:

Pozwól serwerowi mysql akceptować połączenia zdalne. W przypadku tego otwartego pliku mysqld.conf:

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

Wyszukaj wiersz zaczynający się od „bind-address” i ustaw jego wartość na 0.0.0.0

bind-address                    = 0.0.0.0

i na koniec zapisz plik.

Uwaga: Jeśli korzystasz z MySQL 8+, bind-addressdyrektywa mysqld.cnfdomyślnie nie będzie w pliku. W takim przypadku dodaj dyrektywę do dolnej części pliku /etc/mysql/mysql.conf.d/mysqld.cnf.

Teraz zrestartuj serwer mysql za pomocą systemdlub użyj starszej servicekomendy. To zależy od twojego systemu operacyjnego:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Wreszcie serwer mysql może teraz akceptować połączenia zdalne.

Teraz musimy utworzyć użytkownika i udzielić mu pozwolenia, abyśmy mogli zdalnie zalogować się do tego użytkownika.

Połącz się z bazą danych MySQL jako root lub dowolny inny użytkownik z uprawnieniami root.

mysql -u root -p

teraz utwórz żądanego użytkownika zarówno w localhost, jak i w symbolu wieloznacznym „%” i nadaj uprawnienia wszystkim bazom danych jako takim.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Następnie,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

I na koniec nie zapomnij spuścić uprawnień

FLUSH PRIVILEGES;

Uwaga: Jeśli skonfigurowałeś zaporę na serwerze bazy danych, musisz także otworzyć port 3306domyślny portu MySQL, aby zezwolić na ruch do MySQL.

Mam nadzieję że to pomoże ;)

Imtiaz Shakil Siddique
źródło
2
sudo systemctl restart mysqld.service jest dla Debiana, musiałem użyć sudo systemctl restart mysql.service jest dla Ubuntu
ani0904071
Zaktualizowałem odpowiedź i dodałem polecenie restartu mysql dla obu dystrybucji. dzięki @ ani0904071
Imtiaz
17

Uruchom następujące czynności:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Następnie spróbuj połączyć się z podanego adresu IP:

mysql -h address-of-remove-server -u root -p   

Powinieneś być w stanie się połączyć.

akhil.ov
źródło
15

Możesz spowolnić problem MariaDB za pomocą tego polecenia :

Uwaga:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

%jest symbolem wieloznacznym. W takim przypadku odnosi się do wszystkich adresów IP.

未来 陆家嘴 顶尖 的 投资 人
źródło
3
w mysql musisz (1) .zmienić my.cnf content (2) .grant zdalny użytkownik (3) zajmij się zaporą ogniową, aby nasłuchiwać portu 3306.
未来 陆家嘴 顶尖 的 投资 人
Uratowałeś mi dzień. Doceniam to!
Almett
8
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
użytkownik3846464
źródło
7

Aby uzyskać zdalny dostęp do bazy danych serwer Mysql 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
Anil Rana
źródło
5
  • Uruchom MYSQL przy użyciu użytkownika admin
    • mysql -u admin-user -p (WPROWADŹ HASŁO NA PROMOCIE)
  • Utwórz nowego użytkownika:
    • UTWÓRZ UŻYTKOWNIKA „newuser” @ „%” IDENTYFIKOWANY PRZEZ „hasło”; (% -> anyhost)
  • Przyznaj uprawnienia:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @ '%';
    • PRZYWILEJE PŁUCZĄCE;

Jeśli korzystasz z instancji EC2, nie zapomnij dodać reguł ruchu przychodzącego do grupy zabezpieczeń za pomocą MYSQL / Aurura.

Moh .S
źródło
5

Edytuj plik:

/etc/mysql/percona-server.cnf

Dołącz poniższy kod w pliku.

[mysqld] bind-address = 0.0.0.0

Utwórz użytkownika do zdalnego dostępu.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Cały serwer linux działa,

MSWin c: \ Znajdź lokalizację lokalizacji \ ścieżki pliku

Czołg Tejas
źródło
[mysqld] trzeba dodać do pliku, inaczej nie działa poprawnie
Tejas Tank
3

Wystarczy utworzyć użytkownika w jakiejś bazie danych, takiej jak

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Następnie idź do

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfi zmień linię bind-address = 127.0.0.1nabind-address = 0.0.0.0

Następnie możesz połączyć się z tą bazą danych z dowolnego adresu IP.

Diogo Mendes
źródło
3

Otwórz mysql consolei wykonaj następujące polecenie (wprowadź nazwę bazy danych, nazwę użytkownika i hasło):

UDZIEL WSZYSTKIE NA twoja nazwa bazy danych. * ABY admin @ '%' ZIDENTYFIKOWANY PRZEZ 'twojeRootPassword';

Następnie wykonaj:

PRZYWILEJE PŁUCZĄCE;

Otwórz wiersz poleceń i otwórz plik /etc/mysql/mysql.conf.d/mysqld.cnfza pomocą dowolnego edytora z root privileges.

Na przykład:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Następnie skomentuj poniższy wiersz:

adres powiązania = 127.0.0.1

Uruchom ponownie mysql, aby odzwierciedlić zmiany za pomocą polecenia:

sudo service mysql restart

Cieszyć się ;)

Usman Yousaf
źródło
2

Musisz zmienić plik konfiguracyjny mysql:

Zacznij od edycji pliku konfiguracyjnego mysql

vim /etc/mysql/my.cnf

Dodaj:

bind-address = 0.0.0.0
bhushan pardhi
źródło
0

W panelach witryn, takich jak cPanel, możesz dodać pojedynczy %znak (procent) w dozwolonych nazwach hostów, aby uzyskać dostęp do bazy danych MySQL.

Dodając jeden %, możesz uzyskać dostęp do bazy danych z dowolnego adresu IP lub strony internetowej, nawet z aplikacji komputerowych.

Muhammad Saqib
źródło
proszę nie odnosić się do czegoś takiego jak cPanel, gdy jest prezentowane proste zapytanie, to nigdy nie pokaże działania dla nikogo innego
Tobias Hagenbeek
@TobiasHagenbeek Dziękujemy za opinię. Ta metoda / sztuczka nie została wymyślona przeze mnie (jest powszechna w Internecie). Ale jestem jednym z testerów tej metody i odkryłem, że jest to najłatwiejsza i działająca metoda, dlatego opublikowałem ją tutaj. Wiem, że w tej metodzie są pewne zagrożenia bezpieczeństwa, które można pominąć.
Muhammad Saqib,
0

Na przykład w moim CentOS

sudo gedit /etc/mysql/my.cnf

skomentuj następujące wiersze

# bind-address = 127.0.0.1

następnie

usługa sudo mysqld restart

zawhtut
źródło
0

Jeśli chcesz przyznać zdalny dostęp do bazy danych z dowolnego adresu IP, uruchom komendę mysql, a następnie uruchom następującą komendę.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
Atul6.Singh
źródło
0

tym, co działało na Ubuntu, jest nadanie użytkownikowi wszystkich uprawnień:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

i ustawienie adresu powiązania w /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

następnie ponownie uruchamiając demona mysql:

service mysql restart
Miguel Mota
źródło
-7

Możesz wyłączyć wszystkie zabezpieczenia, edytując /etc/my.cnf:

skip-grant-tables
Danyial Shahid Ali
źródło
usuwa to wszystkie wymagania dotyczące hasła
Kristopolous
5
Pamiętaj, że nie zaleca się włączania tej opcji w środowisku produkcyjnym, ponieważ umożliwia to każdemu połączenie bez hasła!
AStopher
jest to jednak idealne rozwiązanie w środowisku programistycznym
DMCoding
Umożliwia to włamanie się do bazy danych bez użycia hasła.
MilkyWay90,
@DanielJames nawet dla środowiska programistycznego to okropny pomysł
Dragas