Malo by to byť veľmi jednoduché, ale za celý život sa mi to nedarí.
Snažím sa len vzdialene pripojiť k serveru MySQL.
Pripájanie ako
mysql -u root -h localhost -p
funguje dobre, ale keď sa pokúšate
mysql -u root -h 'any ip address here' -p
zlyhá s chybou
ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
V tabuľke mysql.user
je presne rovnaký záznam pre používateľa 'root' s hostiteľom 'localhost' ako iný s hostiteľom '%'.
Som v koncoch a netuším, ako mám postupovať. Akékoľvek nápady sú vítané.
Možno ide o bezpečnostné opatrenie. Môžete skúsiť pridať nové konto správcu:
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;
Hoci, ako poznamenal Pascal a iní, nie je'to dobrý nápad mať používateľa s takýmto prístupom otvoreného pre akúkoľvek IP. Ak potrebujete administrátorského používateľa, použite root a nechajte ho na localhost. Pri akejkoľvek inej činnosti presne špecifikujte oprávnenia, ktoré potrebujete, a obmedzte prístupnosť používateľa, ako navrhuje Pascal nižšie.
Upraviť:
Z FAQ MySQL:
Ak nemôžete zistiť, prečo sa vám
Prístup zamietnutý, odstráňte z používateľa tabuľky všetky záznamy, ktoré majú príznak Host hodnoty obsahujúce zástupné znaky (položky ktoré obsahujú znaky '%' alebo '_'). A veľmi častou chybou je vloženie nového záznam s Host='%' a User='nejaký_užívateľ', pričom si myslí, že to umožňuje zadať localhost na pripojiť z toho istého počítača. Na stránke dôvodom, prečo to nefunguje, je, že predvolené oprávnenia zahŕňajú položku s Host='localhost' a User=''. Pretože táto položka má Host hodnotu 'localhost', ktorá je viac špecifickejšia ako '%', používa sa v prednosť pred novou položkou, keď pripájaní z localhost! Správne postupom je vloženie druhej položky s Host='localhost' a User='some_user', alebo odstrániť položku s Host='localhost' a User=''. Po odstránení položky, nezabudnite vydať príkaz FLUSH PRIVILEGES príkaz na opätovné načítanie tabuliek udeľovania. Pozri tiež časť 5.4.4, "Prístup Kontrola, Fáza 1: Pripojenie Overenie".
Správa *Host ''xxx.xx.xxx.xxx'' nemá povolené pripojenie k tomuto serveru MySQL
je odpoveďou servera MySQL klientovi MySQL. Všimnite si, že vracia IP adresu a nie názov hostiteľa.
Ak sa pokúšate pripojiť pomocou príkazu mysql -h<hostname> -u<somebody> -p
a vráti vám túto správu s IP adresou, potom MySQL server nie je schopný vykonať spätné vyhľadávanie na klientovi. Toto je kritické, pretože takto mapuje klienta MySQL na granty.
Uistite sa, že môžete vykonať nslookup <mysqlclient>
OD servera MySQL. Ak to nefunguje, potom na serveri DNS nie je žiadny záznam. Prípadne môžete vložiť záznam do súboru HOSTS servera MySQL'(<ipaddress> <fullyqualifiedhostname> <hostname>
<- Na poradí tu môže záležať).
Práve tento problém vyriešil záznam v súbore hostiteľa môjho servera, ktorý umožňuje spätné vyhľadávanie klienta MySQL.
Ak upravujete tabuľky grantov ručne (pomocou INSERT, UPDATE atď.), mali by ste vykonať
príkaz FLUSH PRIVILEGES
, aby ste serveru povedali, aby znovu načítal tabuľky udeľovania.
PS: Neodporúčam povoliť každému hostiteľovi pripojenie pre každého používateľa (najmä nie použitie root
). Ak používate mysql pre aplikáciu typu klient/server, uprednostnite adresu podsiete. Ak používate mysql s webovým serverom alebo aplikačným serverom, používajte špecifické IP adresy.