2012-04-19 26 views
47

Używałem SQL Server i teraz używam MySQL dla projektu. Dzięki programowi SQL Server nasi programiści mogą łączyć się ze zdalną bazą danych na swoich komputerach lokalnych, jeśli znają host, nazwę użytkownika i hasło. Z MySQL, chociaż, aby dać dostęp Deweloper z lokalnych maszyn, byłem konieczności logowania się do MySQL i wykonanie:Zezwalaj na wszystkie połączenia zdalne, MySQL

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges; 

Gdzie address jest adres IP maszyny dewelopera. Oczywiście, jeśli zmieniają sieci, muszę wykonać to ponownie. Czy istnieje sposób na zezwolenie na wszystkie połączenia zdalne, takie jak na serwerze SQL Server, czy z jakiegoś powodu jest to zły pomysł? Mamy nazwę użytkownika i hasło wciąż .. Jestem oczywiście nieco zdezorientowany.

Ponadto: jest to programowa baza danych i jest dostępna tylko z naszej wewnętrznej sieci. Rozumiem, dlaczego udzielanie wszystkim dostępu do produkcyjnej bazy danych jest złym pomysłem.

+0

Cześć. Mam ten sam problem i wykonałem wszystkie sugerowane polecenia, ale nie mam dostępu do zdalnego dostępu. proszę pomóż mi. –

Odpowiedz

114

Jak zauważył Ryan powyższego polecenia potrzebne jest

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Należy jednak pamiętać, że dokumentacja wskazuje, że aby to zadziałało, innego konta użytkownika z localhost muszą być stworzone dla tego samego użytkownika ; w przeciwnym razie anonimowe konto utworzone automatycznie przez mysql_install_db ma pierwszeństwo, ponieważ ma bardziej specyficzną kolumnę hosta.

Innymi słowy; aby użytkownik user mógł łączyć się z dowolnego serwera; muszą zostać utworzone 2 rachunki w następujący sposób:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Przeczytaj pełną dokumentację here.

A oto odpowiedni kawałek dla odniesienia:

Po podłączeniu do serwera jako root, można dodać nowe konta. W Poniższe stwierdzenia używać GRANT założyć cztery nowe konta:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'admin'@'localhost'; 
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 
mysql> CREATE USER 'dummy'@'localhost'; 

kontach utworzonych przez te oświadczenia mają następujące właściwości:

Two rachunków mieć nazwę użytkownika Monty i hasło do some_pass. Oba konta są kontami superużytkowników z pełnymi uprawnieniami, aby móc cokolwiek zrobić. Konto 'monty' @ 'localhost' może być używane tylko wtedy, gdy łączy się z lokalnym hostem. Konto "monty" @ '% używa symbolu wieloznacznego'% ' dla części hosta, więc można go użyć do połączenia z dowolnego hosta .

Konieczne jest posiadanie obu kont dla monty, aby móc połączyć z dowolnego miejsca jako monty.Bez konta localhost, anonimowe konto użytkownika dla localhost, utworzone przez , mysql_install_db, będzie miało pierwszeństwo, gdy Monty łączy się z hostem lokalnym z domeny . W rezultacie monty będą traktowane jako anonimowi użytkownicy. Powodem tego jest to, że konto anonimowego użytkownika ma większą wartość kolumny Hosta o wartości niż konto "monty" @ '% i tym samym jest wcześniej w porządku sortowania tabel użytkowników. (Tabela użytkownik sortowania jest omówione w rozdziale 6.2.4 „Access Control, Etap 1: Sprawdzanie połączenia”.)

To wydaje mi się głupie, chyba mam to nieporozumienie.

+0

Działa doskonale. Dzięki! –

10
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Umożliwi określonym użytkownikom zalogowanie się z dowolnego miejsca.

Jest zły, ponieważ usuwa pewne zabezpieczenia, to znaczy, gdy konto zostało przejęte.

+2

Chciałbym też móc przyjąć twoje. Dzięki! –

+2

Jeszcze jedną rzeczą, którą musiałem zmienić, był interfejs bindowania TCP. Ponieważ musiałem połączyć się z instancją mysql hostowaną w chmurze, zmieniłem "bind-address = 0.0.0.0" w /etc/mysql/my.cnf, domyślnie 127.0.0.1 gdzie mysql słucha tylko na lokalnym sprzężeniu zwrotnym i nie robi połączenia z sieci zewnętrznych. –

+0

Starałem się dowiedzieć, jak połączyć się z anywhwere, a te soltuiony tylko pomogły mi rozwiązać ten początkowy problem. Wielkie dzięki, ale mam inny problem. Próbowałem zmienić numer portu z 80 na 8080. Teraz, gdy używam http: // nazwaserwera: 8080/mysite to szybko wraca do http: // nazwaserwera/mysite daje 404 - plik lub katalog nie został znaleziony błąd. Jak sprawić, by działał z portem 8080? Świetne rzeczy – Kenny

18

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

[mysqld] 
skip-grant-tables 
+0

dobry! dzięki! :) – Adrian

+0

Podoba mi się ten! – adbarads

2

również trzeba wyłączyć poniżej linii w pliku konfiguracyjnym: bind-address = 127.0.0.1

1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%' 
3

Zainstaluj i skonfiguruj mysql do zdalnego połączenia z dowolnego miejsca.

NIE DZIAŁA Z mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

Na Ubuntu zainstalować MySQL przy użyciu:

sudo apt-get install mysql-server 

właśnie poniżej w pliku /etc/mysql/my.cnf

[mysqld] 
#### Unix socket settings (making localhost work) 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 

#### TCP Socket settings (making all remote logins work) 
port   = 3306 
bind-address = 0.0.0.0 

Logowanie do DB z serwerem za pomocą

mysql -u root -p

Utwórz użytkownika DB, używając poniższej instrukcji

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’; 

Otwórz firewall:

sudo ufw allow 3306 

restart mysql

sudo service mysql restart 
+0

jeśli cokolwiek, "nadaj wszystkie uprawnienia od *. * Do" nazwa_użytkownika "@"% "określone przez" hasło ";' ...ale w każdym razie nie działa –

+0

sudo ufw allow 3306 To zrobiło magię dla mnie :) –

+0

Najbardziej kompletna odpowiedź, dzięki! –

Powiązane problemy