Hier is een snelle checklist voor het inschakelen van externe verbindingen voor MySQL, maar lees eerst (6). Als ik iets heb gemist, voel je vrij om te bewerken.
1) Uw externe gebruiker maakt verbinding via een account dat is aangemaakt met de juiste user,host
items (kijk naar de output van select user,host from mysql.user order by 1,2
). Zo niet, kijk dan in de CREATE USER
en/of GRANT
commando's. Bekijk de uitvoer van SHOW GRANTS
voor de gebruiker.
2) Je hebt flush privileges;
gedaan
(Sommigen zeggen dat het niet nodig is, anderen zeggen van wel).
3a) Zoek uw mysql-configuratiebestand waarnaar wordt verwezen in 3b) hieronder door informatie te bekijken in Dit document
(of voor Windows, waarschijnlijk beneden de C:\ProgramData\MySQL\MySQL Server 5.NNN
pad). Het verschilt per distributie voor Linux.
3b) U heeft my.ini
gewijzigd en opgeslagen (Windows) of my.cnf
(Linux) en gewijzigd bind-address
weg van 127.0.0.1
of localhost
, in het voordeel van 0.0.0.0
. En je hebt en . gemaakt de volgende regel verwijderd:#skip-networking
. Het ziet er ongeveer zo uit:
[mysqld]
bind-address=0.0.0.0
#skip-networking
4) Start de mysql-daemon opnieuw. Hoe je dit doet verschilt per distro.
5) Firewall-problemen. Zorg ervoor dat de poort, standaard 3306
. is , staat open voor de buitenwereld (wat eigenlijk gewoon je intranet kan zijn). Dit omvat alle andere lagen van firewalls, zoals AWS EC2-beveiligingsgroepen of soortgelijke, indien aanwezig.
6) Begrijp dat hieraan een veiligheidsrisico is verbonden. Voer dit niet uit, tenzij u weet hoe u uw mysql-server blootstelt aan externe verbindingen.
7) Voer regelmatig beveiligingsbeoordelingen uit met select
verklaring vermeld in 1. hierboven inclusief het bekijken van de SHOW GRANTS
voor die gebruikers. Geef gebruikers niet onnodig te veel wildcards. Geef gebruikers liever de minimale privileges om hun werk gedaan te krijgen.
8) Onderzoek regelmatig mislukte verbindingspogingen via het algemene logboek en het foutenlogboek, zoals hieronder kort wordt uitgelegd.
Voor inkomend kun je het algemene querylogboek bekijken.
select @@general_log; -- a 1 indicates it is turned on for capture
select @@general_log_file; -- the file that it logs to
Dus alle zoekopdrachten kunnen . zijn aangemeld bij het Algemeen querylogboek
als de instelling is ingeschakeld. Bekijk het logboek voor "connect", maar vooral voor Access denied for user
mislukte pogingen te zien. Doe dit regelmatig (niet om de paar jaar). Ik doe het minstens twee keer per dag. Let op, u kunt de rapportage uiteraard automatiseren via een extern programma. De buitenwereld gaat pond uw server om binnen te komen zoals de afbeelding hieronder. Het is een realiteit; zet je er voor in.
Bekijk de handleiding voor Het foutenlogboek ook, let op waarschuwingsniveaus en breedsprakigheidsinstellingen op basis van uw versie.
Ik zou aanraden om een back-up op datum te maken (als zodanig genoemd) en de logbestanden na de back-up te verwijderen om na de back-up opnieuw te beginnen. De logbestanden kunnen snel enorm groot worden, vooral het algemene logboek. Vergeet niet of je de instelling voor logboekregistratie hebt in- of uitgeschakeld.
U kunt de twee logbestanden gebruiken om te bepalen of uw verbindingspoging voorbij de firewall is gekomen tijdens de stappen hier.