Domanda

Ho un problema con l'utente root di MySQL nella mia configurazione di MySQL e non riesco proprio a risolverlo per tutta la vita. Sembra che in qualche modo ho incasinato l'utente root e il mio accesso ai database ora è molto irregolare.

Per riferimento, sto usando MAMP su OS X per fornire il server MySQL. Non sono sicuro di quanto sia importante, immagino che qualunque cosa abbia fatto richiederà una correzione da riga di comando per risolverlo.

Posso avviare MySQL usando MAMP come al solito e accedere ai database usando gli utenti 'standard' che ho creato per le mie app PHP. Tuttavia, l'utente root, che utilizzo nel mio client GUI di MySQL, e anche in phpMyAdmin, può accedere solo a " information_schema " database, così come due che ho creato manualmente e presumibilmente (e erroneamente) lasciato aperte le autorizzazioni. I miei circa 15 altri database non sono accessibili dall'utente root. Quando carico phpMyAdmin, la schermata iniziale dice: " Crea nuovo database: nessun privilegio " ;.

A un certo punto ho sicuramente cambiato la password del mio utente root usando la finestra di dialogo MAMP. Ma non ricordo se ho fatto qualcos'altro che avrebbe potuto causare questo problema. Ho provato di nuovo a cambiare la password e non sembra esserci alcun cambiamento nel problema.

Ho anche provato a reimpostare la password di root usando la riga di comando, incluso l'avvio manuale di mysql con --skip-grant-tables e lo svuotamento di privs, ma ancora una volta, nulla sembra risolvere il problema.

Sono arrivato alla fine delle mie idee e apprezzerei molto alcuni consigli e diagnosi passo-passo di uno degli esperti qui!

Mille grazie per il tuo aiuto.

È stato utile?

Soluzione

Questo perché MAMP e la riga di comando mysql (e mysql tutto tranne MAMP) sono diversi.

MAMP ha il suo mysql integrato e non puoi accedervi tramite la riga di comando, solo la build in phpmyadmin.

questa è stata la mia esperienza, ho MAMP e uso l'altro mysql per ruby ??su binari e altre cose.

Altri suggerimenti

Ho avuto lo stesso problema: solo un account utente ha funzionato per accedere ai database mysql tramite la console di amministrazione o il browser delle query. Quando ho usato le tabelle skip-grant improvvisamente tutti gli account potevano accedere, incluso root.

L'ho visto come un bug fino al 2006 , ma il Alla fine non c'è un comando che può essere eseguito in modalità skip-grant-tables, quindi non ho ancora risolto il problema.

Cosa mi ha aiutato
Questa risposta è simile a quella descritta da Ben Bakelaar nel link sopra . Il problema si presenta quando my.ini ha il flag di risoluzione del nome disabilitato (skip-name-resolve). Questo uccide la capacità di mysql di risolvere "localhost" e la tabella mysql.user ha solo una voce per localhost / root.

Aggiorna invece la voce localhost della tabella mysql.user in 127.0.0.1 e puoi accedere alle console locali anche con la funzione skip-name-resolve abilitata.

Prova ad avviare il server con --skip-grant-tables e quindi a controllare le tabelle dei privilegi nel database mysql:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

Puoi anche provare:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

Una volta dentro potresti farlo per tentare di dare i privilegi di root:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

Il tuo commento mostra i tuoi privilegi di root attuali (senza --skip-grant-tables). Va bene che non hai alcuna voce per 'root' @ '%', non lo hai per impostazione predefinita e puoi considerarlo una misura di sicurezza.

Sembra che tu abbia incasinato i tuoi privilegi 'root' @ 'localhost' . CONCESSIONE DI TUTTI I PRIVILEGI. è strano. Di solito, hai qualcosa come CONCESSIONE DI TUTTI I PRIVILEGI SU *. * o CONCESSIONE DI TUTTI I PRIVILEGI SU myDatabase.myTable . Il tuo GRANT non specifica i database e / o le tabelle per cui concedere i privilegi. Non ho idea di come il tuo cliente sia riuscito a produrlo. Non riesco a riprodurlo con il client della riga di comando mysql (provato stringhe vuote, spazi bianchi, qualsiasi tipo di virgolette ...), mysql rifiuta l'istruzione GRANT (che, ovviamente, è il comportamento corretto). Sembra che MAMP stia facendo qualcosa di veramente strano. Dal momento che non riesco a riprodurre un GRANT come il tuo, non posso dire come mysql lo interpreti, ma immagino che abbia impostato i privilegi su 'N' a livello globale.

Per risolverlo, è necessario un utente con privilegi adeguati. Di solito, hai un utente 'root' @ 'localhost' e un 'root' @ 'your-hostname' . Se sei fortunato, 'root' @ 'your-hostname' va ancora bene. D'altra parte, le connessioni mysql funzionano come segue: se ti connetti a localhost , ti connetti come 'root' @ 'localhost' (non sei sicuro di 127.0.0.1 , immagino sia anche 'root' @ 'localhost' ). Se ti connetti a your-hostname , ti connetti come 'root' @ 'your-hostname' . Se i privilegi di questo utente sono ancora corretti, puoi aggiornare i privilegi per 'root' @ 'localhost' e hai finito.

Nel tuo commento, dici che non puoi connetterti tramite 127.0.0.1 poiché il socket si trova in un posto insolito. Immagino tu abbia frainteso l'errore. IIRC ti connetti tramite socket se ti connetti a 'localhost' , ma tramite TCP / IP se ti connetti a 127.0.0.1 o your-hostname . Se mysql tenta di connettersi tramite socket e non riesce a trovare il socket (perché non è stato specificato il percorso corretto), il messaggio di errore indica dove mysql ha tentato di trovare il socket. Il tuo messaggio di errore no. Immagino che il tuo errore sia un errore di rete. Forse hai avviato mysql-server con l'opzione --skip-networking o la tua configurazione specifica un indirizzo bind errato. Devi prima risolverlo, altrimenti non puoi connetterti come 'root' @ 'your-hostname' .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top