Android

Hvordan tillate eksterne tilkoblinger til mysql databaseserver

Introduction to Azure Database for MySQL

Introduction to Azure Database for MySQL

Innholdsfortegnelse:

Anonim

Som standard lytter MySQL-serveren bare til tilkoblinger fra localhost, noe som betyr at den bare kan nås av applikasjoner som kjører på samme vert.

I noen situasjoner er det imidlertid nødvendig å få tilgang til MySQL-serveren fra ekstern plassering. For eksempel når du vil koble til den eksterne MySQL-serveren fra det lokale systemet, eller når du bruker en multiserverdistribusjon der applikasjonen kjører på en annen maskin enn databaseserveren. Et alternativ ville være å få tilgang til MySQL-serveren gjennom SSH Tunnel og et annet er å konfigurere MySQL-serveren til å godta eksterne tilkoblinger.

I denne guiden vil vi gå gjennom trinnene som er nødvendige for å tillate fjerntilkoblinger til en MySQL-server. De samme instruksjonene gjelder for MariaDB.

Konfigurere MySQL Server

Det første trinnet er å stille MySQL-serveren til å lytte på en spesifikk IP-adresse eller alle IP-adresser på maskinen.

Hvis MySQL-serveren og klientene kan kommunisere med hverandre over et privat nettverk, er det beste alternativet å stille MySQL-serveren til å kun lytte på den private IP-en. Ellers, hvis du vil koble til serveren via et offentlig nettverk, må du stille MySQL-serveren til å lytte på alle IP-adresser på maskinen.

For å gjøre det, må du redigere MySQL-konfigurasjonsfilen og legge til eller endre verdien for bind-address alternativet. Du kan angi en enkelt IP-adresse og IP-områder. Hvis adressen er 0.0.0.0 , godtar MySQL-serveren tilkoblinger på alle IPv4-grensesnitt som vert. Hvis du har IPv6 konfigurert på systemet ditt, bruker du :: stedet for 0.0.0.0 .

Plasseringen av MySQL-konfigurasjonsfilen er forskjellig avhengig av distribusjonen. I Ubuntu og Debian er filen lokalisert på /etc/mysql/mysql.conf.d/mysqld.cnf , mens filen i Red Hat-baserte distribusjoner som CentOS ligger på /etc/my.cnf .

Åpne filen med tekstredigereren:

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

Søk etter en linje som begynner med bind-address og sett verdien til IP-adressen som en MySQL-server skal lytte til.

Som standard er verdien satt til 127.0.0.1 (lytter bare i localhost).

I dette eksemplet setter vi MySQL-serveren til å lytte på alle IPv4-grensesnitt ved å endre verdien til 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

Hvis det er en linje som inneholder skip-networking , kan du slette den eller kommentere den ved å legge til # på begynnelsen av linjen.

I MySQL 8.0 og nyere er kanskje ikke bind-address stede. I dette tilfellet legger du det til under seksjon.

Når det er gjort, start MySQL-tjenesten på nytt for at endringene skal tre i kraft. Bare root eller brukere med sudo-rettigheter kan starte tjenestene på nytt.

For å starte MySQL-tjenesten på nytt på Debian eller Ubuntu, skriver du:

sudo systemctl restart mysql

På RedHat-baserte distribusjoner som CentOS for å starte tjenestekjøringen på nytt:

sudo systemctl restart mysqld

Gi tilgang til en bruker fra en ekstern maskin

Neste trinn er å gi tilgang til databasen til den eksterne brukeren.

Logg på MySQL-serveren som rotbruker ved å skrive:

sudo mysql

mysql -uroot -p

Fra innsiden av MySQL-skallet bruker du GRANT setningen for å gi tilgang for den eksterne brukeren.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Hvor:

  • database_name er navnet på databasen som brukeren vil koble seg til. user_name er navnet på MySQL-brukeren. ip_address er IP-adressen som brukeren vil koble seg til fra. Bruk % å la brukeren koble seg fra en hvilken som helst IP-adresse. user_password er brukerpassordet.

For å gi tilgang til en database dbname til en bruker som heter foo med passord my_passwd fra en klientmaskin med IP 10.8.0.5 , vil du for eksempel kjøre:

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Konfigurere brannmur

Det siste trinnet er å konfigurere brannmuren din slik at den tillater trafikk på port 3306 (MySQL standardport) fra eksterne maskiner.

iptables

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Tillat tilgang fra en spesifikk IP-adresse:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW er standard brannmurverktøy i Ubuntu. Slik tillater du tilgang fra hvilken som helst IP-adresse på Internett (veldig usikker):

sudo ufw allow 3306/tcp

Tillat tilgang fra en spesifikk IP-adresse:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD er standardverktøy for brannmuradministrasjon i CentOS. Slik tillater du tilgang fra hvilken som helst IP-adresse på Internett (veldig usikker) type:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

For å tillate tilgang fra en spesifikk IP-adresse på en bestemt port, kan du enten opprette en ny FirewallD-sone eller bruke en rik regel. Opprett en ny sone som heter mysqlzone :

sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

Bekrefte endringene

Følg kommandoen for å bekrefte at den eksterne brukeren kan koble seg til MySQL-serveren:

mysql -u user_name -h mysql_server_ip -p

Hvor user_name er navnet på brukeren du ga tilgang til og mysql_server_ip er IP-adressen til verten der MySQL-serveren kjører.

Hvis alt er satt opp riktig, vil du kunne logge deg på den eksterne MySQL-serveren.

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

Feilen nedenfor indikerer at brukeren du prøver å logge på ikke har tillatelser til å få tilgang til den eksterne MySQL-serveren.

"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"

Konklusjon

MySQL, den mest populære open source-databaseserveren, lytter som standard bare etter innkommende tilkoblinger på localhost.

For å tillate eksterne tilkoblinger til en MySQL-server, må du utføre følgende trinn:

  1. Konfigurer MySQL-serveren til å lytte på alle eller et bestemt grensesnitt. Gi tilgang til den eksterne brukeren. Åpne MySQL-porten i brannmuren.
mysql mariadb