Accesso negato per l'utente 'root' @ '%'


29

Ho usato per accedere all'utente root in MySQL bene. Ma recentemente non sono più in grado di farlo.

Sono in grado di accedere correttamente:

 mysql -u root -p

Ecco lo stato mysql dopo il login:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

Ma quando voglio fare qualsiasi azione, come ad esempio:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

Capisco che %viene utilizzato per indicare qualsiasi host, ma il mio stato indica chiaramente localhost. Qualcuno ha un'idea di cosa potrebbe succedere?

Risposte:


17

Penso che tu abbia utenti anonimi

Prova a eseguire questo:

SELECT user,host,password FROM mysql.user WHERE user='';

Questo mostrerà quali utenti anonimi esistono. Molto probabilmente, vedrai una riga con un utente vuoto, un host %e una password vuota come mostrato di seguito:

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Quindi, come hai effettuato l'accesso? Esegui questa query:

SELECT USER(),CURRENT_USER();

Cosa ti dice questo?

  • USER () riporta come hai tentato di autenticarti in MySQL
  • CURRENT_USER () riporta come ti è stato permesso di autenticarti in MySQL

La seconda funzione CURRENT_USER()rivela come l'utente anonimo è stato utilizzato per accedere.

Quali privilegi avevi quando hai effettuato l'accesso?

Per favore, corri

SHOW GRANTS;

Questo svelerà quali privilegi avevi al momento del login. Il fatto che ti sia stato impedito di creare un database mostra che non eri root ma un utente con privilegi inferiori.

Si prega di ripulire le sovvenzioni dell'utente.

Per quanto riguarda il ripristino della password di root, eseguire le seguenti operazioni:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Ho imparato questo metodo efficace da @ShlomiNoach .

Provaci !!!


10

So cosa hai fatto.

Fai questo:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

Probabilmente noterai che restituisce una "N" per Grant_priv. Quindi fai questo:

UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;

E walla! Spero che sia d'aiuto.


inoltre, per motivi di sicurezza, dovresti sempre eliminare l'utente root dopo aver creato un nuovo dba .. assicurati solo che siano CONCESSIONE DI TUTTI I PRIVILEGI quindi alla fine CON OPZIONE CONCESSIONE .. quel bit è importante.
Kevin Florida,

Questo, combinato con la chiusura e la riapertura della connessione (nel mio caso da HeidiSQL) ha funzionato!
xorinzor,

4

Dopo aver inserito come rootutente controlla i tuoi privilegi:

 mysql> show grants for 'root'@'localhost';

Dopo aver verificato i tuoi privilegi, puoi provare a dare a un altro utente tutti i privilegi oppure puoi provare a dare rootnuovamente tutti i privilegi all'utente:

 mysql> grant all privileges on *.* to 'root'@'localhost';

Se il tuo rootutente non ha privilegi, puoi provare a ripristinarli, quindi:

Ferma il mysqldserver

Riavvia il server in questo modo mysqld_safe --skip-grant-table

Ripristina i rootprivilegi con:

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

Questo è quello che ottengo dopo che lo show concede il comando 'root' @ 'localhost': ERRORE 1141 (42000): Non esiste una tale concessione definita per l'utente 'root' sull'host 'localhost'

Qual è l'output del secondo comando?

2
C'è un modo "migliore" per farlo in Debian, dove non è necessario riavviare il server. Proprio come rootconnettersi come debian-sys-maint@localhoste utilizzare la password in /etc/mysql/debian.cnf. Quell'utente ha TUTTI i privilegi in MySQL. La cosa buona è che non è necessario riavviare il server.
Anders,

Prova questo. sudo mysql --defaults-file = / etc / mysql / debian.cnf
Anders

0

I tuoi privilegi potrebbero essere ridotti?

Inoltre, puoi provare a creare un altro account con privilegi di root.

Elimina l'utente root e ricrealo con i privilegi specificati.

Questo può essere utile: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2 - LINUX (Crea file con query che crea, un nuovo utente con privilegi di root completi)

C.5.4.1.1 - Windows (Crea file con query che creano, un nuovo utente con privilegi di root completi)

Query: (Crea utente root)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Manuale MySQL Crea utente: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.