Host ‘xxx.xx.xxx.xxx’ mag geen verbinding maken met deze MySQL-server

Dit zou doodeenvoudig moeten zijn, maar ik kan niethet werkend krijgen voor mijn leven.
Ik probeer gewoon op afstand verbinding te maken met mijn MySQL-server.

  • Verbinden als:
   mysql -u root -h localhost -p  
  • werkt prima, maar proberen:
   mysql -u root -h 'any ip address here' -p
  • faalt met de fout:
   ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

In de tabel mysql.userstaat precies dezelfde invoer voor gebruiker ‘root’ met host ‘localhost’ als een andere met host ‘%’.

Ik ben ten einde raad en heb geen idee hoe ik verder moet.
Alle ideeën zijn welkom.


Antwoord 1, autoriteit 100%

Mogelijk een veiligheidsmaatregel. U kunt proberen een nieuw beheerdersaccount toe te voegen:

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;

Hoewel Pascal en anderen hebben opgemerkt, is het geen goed idee om een gebruiker met dit soort toegang open te stellen voor elk IP-adres. Als je een beheerder nodig hebt, gebruik dan root en laat het op localhost staan. Geef voor elke andere actie precies de privileges op die je nodig hebt en beperk de toegankelijkheid van de gebruiker zoals Pascal hieronder suggereert.

Bewerken:

Vanaf de MYSQL FAQ:

Als je niet kunt achterhalen waarom je krijgt
Toegang geweigerd, uit de gebruiker verwijderen
Tabel Alle vermeldingen die gastheer hebben
Waarden met jokertekeningen (vermeldingen
die ‘%’ of ‘_’-tekens bevatten). EEN
Zeer veel voorkomende fout is om een ​​nieuw te plaatsen
toegang met host = ‘%’ en
Gebruiker = ‘some_user’, denkend dat dit
Hiermee kunt u localhost opgeven
Maak verbinding met dezelfde machine. De
Reden dat dit niet werkt is dat
De standaardrechten omvatten een
toegang met host = ‘localhost’ en
Gebruiker = ”. Omdat die vermelding een gastheer heeft
waarde ‘localhost’ die meer is
specifiek dan ‘%’, wordt het gebruikt in
voorkeur aan de nieuwe invoer wanneer
Verbinden van localhost! Het juiste
procedure is om een ​​tweede item in te voegen
met host = ‘localhost’ en
Gebruiker = ‘some_user’ of om de
toegang met host = ‘localhost’ en
Gebruiker = ”. Na het verwijderen van de invoer,
Vergeet niet om een ​​flush-privileges uit te geven
Verklaring om de subsidie-tabellen opnieuw te laden.
Zie ook paragraaf 5.4.4, “Toegang
Controle, fase 1: verbinding
Verificatie “.


Antwoord 2, Autoriteit 33%

Men moet een new MySQL Usermaken en privileges toewijzen zoals hieronder in Query promptVia PHPMYADMIN of opdrachtprompt:

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;

Eenmaal klaar met alle vier vragen, zou het verbinding moeten maken met username / password


Antwoord 3, Autoriteit 14%

Mijn foutmelding was vergelijkbaar en zei ‘host xxx mag geen verbinding maken met deze MySQL-server ‘, ook al gebruikte ik root. Hier is hoe u ervoor te zorgen dat root de juiste machtigingen heeft.

My Setup :

  • ubuntu 14.04 lts
  • mysql v5.5.37

oplossing

  1. Open het bestand onder ‘ETC / MYSQL / MY.CNF’
  2. Controleer op:

    • poort (standaard is dit ‘poort = 3306’)
    • BIND-ADRES (standaard is dit ‘Bind-adres = 127.0.0.1’; als u wilt openen voor iedereen, reageer deze regel dan gewoon. Voor mijn voorbeeld zal ik zeggen dat de daadwerkelijke server op 10.1 is. 1.7)
  3. Toegang nu toegang tot de MySQL-database op uw werkelijke server (zeg dat uw extern adres 123.123.123.123 is op poort 3306 als gebruiker ‘root’ en ik wil de machtigingen op de database ‘DATEENTRY’ wijzigen. Vergeet niet om het IP-adres te wijzigen , Poort en database-naam naar uw instellingen)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
    
  4. SUDO SERVICE MYSQLD RESTART

  5. moet u nu op afstand kunnen maken met uw database. Ik gebruik bijvoorbeeld MySQL Workbench en Putting In ‘Hostname: 10.1.1.7’, ‘Poort: 3306’, ‘Gebruikersnaam: Root’

Antwoord 4, Autoriteit 9%

Voer gewoon de volgende stappen uit:

1A) Maak verbinding met MySQL (via localhost)

mysql -uroot -p

1B) Als de MySQL-server in Kubernetes (K8S) wordt uitgevoerd en via een NODPORT

wordt geopend

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p
  1. Maak gebruiker

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

  2. Grant-machtigingen

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

  3. Flush-privileges

    FLUSH PRIVILEGES;


Antwoord 5, Autoriteit 8%

U moet toegang verlenen aan de gebruiker vanaf elke hostnaam.

Dit is hoe u nieuw voorrecht toevoegt van PHPMYADMIN

Goto-privileges & GT; Voeg een nieuwe gebruiker toe

Selecteer Elke host voor de gewenste gebruikersnaam


Antwoord 6, Autoriteit 3%

Het bericht *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL serveris een antwoord van de MySQL-server naar de MySQL-client. Merk op hoe het het IP-adres retourneert en niet de hostnaam.

Als u probeert verbinding te maken met mysql -h<hostname> -u<somebody> -pEn het retourneert dit bericht met het IP-adres, dan kan de MySQL-server geen omgekeerde opzoek doen op de client. Dit is van cruciaal belang, want dat is hoe het de MySQL-client naar de subsidies kaarten.

Zorg ervoor dat u een nslookup <mysqlclient>van de MySQL Server. Als dat niet werkt, is er geen invoer in de DNS-server. U kunt ook een vermelding plaatsen in het hosts-bestand van de MySQL Server (<ipaddress> <fullyqualifiedhostname> <hostname>& LT; – De volgorde hier zou er toe doen).

Een item in het hostbestand van mijn server, waardoor een reverse opzoeking van de MySQL-client dit zeer probleem heeft opgelost.


Antwoord 7, Autoriteit 3%

Eenvoudige manier:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

dan

FLUSH PRIVILEGES;

klaar!


Antwoord 8, autoriteit 2%

Als u de toekenningstabellen handmatig wijzigt (met INSERT, UPDATE, enz.), moet u uitvoeren
een FLUSH PRIVILEGES-instructie om de server te vertellen de toekenningstabellen opnieuw te laden.

PS: Ik zou niet aanraden om elkehost toe te staan verbinding te maken voor elkegebruiker (vooral niet voor het gebruik van root). Als u mysql gebruikt voor een client/server-toepassing, geeft u de voorkeur aan een subnetadres. Als je mysql gebruikt met een webserver of applicatieserver, gebruik dan specifieke IP’s.


Antwoord 9

Dit werkt voor elke toekomstige mysql-verbinding op afstand!

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

Navigeer naar de regel die begint met de bind-address-instructie. Het zou er zo uit moeten zien:

   bind-address            = 0.0.0.0

Log in op uw mysql als root-terminal

   mysql -u root -p
    -- root password
    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;
    EXIT;

Verleen die machine eindelijk exclusieve toestemming om op afstand verbinding te maken met de database met het volgende commando.

   sudo ufw allow from remote_IP_address to any port 3306

Antwoord 10

Gebruik gewoon de interface van MySql’s GUI Tool (SQLyog):

Klik op Gebruikersbeheer:

Als je nu toegang wilt verlenen VOOR ENIGE ANDERE PC op afstand, zorg er dan voor dat, net als in de onderstaande afbeelding, de waarde van het Host-veld % is (wat het jokerteken is)


Antwoord 11

De meeste antwoorden hier laten zien dat u gebruikers maakt met twee hostwaarden: één voor localhosten één voor %.

Houd er rekening mee dat u dit niet hoeft te doen, behalve voor een ingebouwde localhost-gebruiker zoals root. Als u gewoon een nieuwe gebruiker wilt maken die overal kan inloggen, kunt u gebruik maken van

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

en het zal prima werken. (Zoals anderen al hebben gezegd, is het een slecht idee om beheerdersrechten toe te kennen aan een gebruiker van een willekeurig domein.)


Antwoord 12

Een eenvoudige manier is om in te loggen op phpmyadmin met root-account, daar naar de mysql-database te gaan en de gebruikerstabel te selecteren, daar het root-account te bewerken en in het hostveld % wildcard toe te voegen. en dan via ssh flush-privileges

FLUSH PRIVILEGES;

Antwoord 13

Nou, niets van het bovenstaande antwoord werkte voor mij. Na veel zoeken heb ik een oplossing gevonden. Hoewel ik misschien te laat ben, kan dit anderen in de toekomst helpen.

Log in op uw SQL-server vanaf een terminal

mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

Dit zou het toestemmingsprobleem moeten oplossen.

Veel plezier met coderen!!


Antwoord 14

Als dit een recente mysql-installatie is, probeer dan, voordat u iets anders wijzigt, deze opdracht uit te voeren en probeer het opnieuw:

flush privileges;

Dit alleen al lost het probleem voor mij op Ubuntu 16.04, mysql 5.7.20 op. YMMV.


Antwoord 15

Zoek gewoon een betere manier om dat te doen vanuit uw hostingconfiguratiescherm (ik gebruik hier DirectAdmin)

ga gewoon naar de doelserver-DB in uw configuratiescherm, in mijn geval:
MySQL-beheer -> selecteer uw DB -> u zult vinden: “Access Hosts”, voeg eenvoudig uw externe host hier toe en het werkt nu!

Ik denk dat er een vergelijkbare optie is op andere C.panels zoals plesk, enz..

Ik hoop dat het ook voor jou nuttig was.


Antwoord 16

Als u toevallig op Windows gebruikt; Een eenvoudige oplossing is om de configuratiewizard MySQL Server-instantie-instantie uit te voeren. Het staat in uw MySQL-groep in het menu Start. Klik op de tweede van het laatste scherm op het vakje dat zegt “Sta root-toegang vanuit externe machines toe”.


Antwoord 17

Als u WAMP Server + Windows 10 hebt en u deze gebruikt voor ontwikkeling dan met de rechtermuisknop op Wamp-pictogram = & GT; Wamp Settings= & GT; Check Allow Virtual Hosts other than 127*


Antwoord 18

Nou wat u kunt doen is gewoon het MySQL.CFG-bestand openen en u moet hiermee een bindadres wijzigen

bind-adres = 127.0.0.1

en start vervolgens MySQL opnieuw en u kunt die server hierop aansluiten.

Kijk hierop kunt u een idee hebben dat.

Dit is Echte Sol


Antwoord 19

Dit antwoord kan iemand helpen …

Al deze antwoorden hielpen niet, toen besefte ik dat ik het vergat één cruciaal ding te controleren .. de poort 🙂

Ik heb MySQL in een Docker Container die op een andere poort wordt uitgevoerd. Ik wijst naar mijn hostmachine op poort 3306, waar ik een MySQL-server op heb. Mijn container legt de server bloot op poort 33060. Dus al deze keer keek ik naar de verkeerde server! DOH!


Antwoord 20

Dit werkt voor DirectAdmin ;

  1. Ga naar uw DirectAdmin.
  2. Ga naar uw MySQL Management.
  3. Selecteer uw database.
  4. onder uw Accesse HostTabblad, er is een veld.
    U moet dit veld invullen met xxx.xx.xxx.xx.
  5. Klik op Add Host.

Klaar. Nu hebt u toegang tot deze DB met uw your_database_username& your_database_password.
Zo simpel!


Antwoord 21

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

deze fout omdat er geen wachtwoord voor de root is, en dit is mogelijk opgetreden bij u toen u van buitenaf verbinding probeerde te maken.


Antwoord 22

CPANEL-oplossing

Ga naar Cpanel, zoek naar Remote MySQL.
Voeg het IP-adres toe in het invoerveld:

Host (% wildcard is toegestaan)

Reageer om te onthouden welk IP-adres dat is.
Dat was het voor mij.


Antwoord 23

Ik had ook met hetzelfde probleem te maken. Het loste voor mij op in 2 minuten, ik heb gewoon een witte lijst met ip via cpanel

Stel dat u verbinding probeert te maken met de database van server B vanaf server A.
Ga naar Server B Cpanel->Remote MySQL-> voer Server A IP-adres in en dat is het.


Antwoord 24

Als u MySQL WorkBench gebruikt, kunt u dit eenvoudig bereiken:

  1. Selecteer in het menu Server -> Gebruikers en rechten

  2. Klik linksonder op “Account toevoegen”

  3. Vul het formulier in met gebruikersnaam, hostovereenkomst (% betekent elke host) en het wachtwoord

  4. Klik op “Toepassen” rechtsonder

Hierna ben je klaar om te gaan. Als u vervolgens uw configuratie wilt verfijnen, kunt u het tabblad “Beheerdersrollen” gebruiken om de opdracht in te stellen die door de gebruiker kan worden gebruikt (SELECT, ALTER enz.) en het tabblad “Schemaprivileges” om de gebruikersinteractie te beperken tot specifieke schema’s.


Antwoord 25

Probleem: root@localhost kan geen verbinding maken met een nieuwe installatie van mysql-community-server op openSUSE 42.2-1.150.x86_64.
Mysql weigert verbindingen – punt uit.

Oplossing:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

Bestandsgebruiker.MYD heeft 0 grootte(echt waar?!).
Ik heb alle 3 de bestanden gekopieerd van een ander werkend systeem.

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

Ik kon inloggen. Daarna was het een kwestie van alle schemarechten opnieuw toepassen.
Als je IPv6 hebt uitgeschakeld, schakel het dan tijdelijk opnieuw in, zodat root@::1-account ook kan werken.


Antwoord 26

Als je een mysql-query probeert uit te voeren zonder de connectionstring te definiëren, krijg je deze foutmelding.

Waarschijnlijk bent u vergeten de verbindingsreeks te definiëren voordat u deze uitvoert. heb je dit nagekeken?
(sorry voor slecht Engels)


Antwoord 27

Alle antwoorden hier werkten niet in mijn geval, dus ik ga ervan uit dat dit andere gebruikers in de toekomst kan helpen. Dit kan ook een probleem zijn in onze code, niet alleen in MySQL alleen.

Als u VB.NET

gebruikt

In plaats van deze code:

Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database
 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database
 MysqlConn = New MySqlConnection()

U moet MysqlConn = New MySqlConnection()op de eerste regel verplaatsen. Dus het zou zo zijn

MysqlConn = New MySqlConnection()
 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database
 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

Other episodes