2013-10-08 14 views
12

Ho mysql Versione server: 5.5.32-0ubuntu0.12.04.1 (Ubuntu) installato linux Ubuntu 12.04 LTS.non può concedere privilegi al database mysql

Mi sembra di avere tutti i permessi come root. Posso creare un utente e un db. Tuttavia, non riesco a dare all'utente tutte le autorizzazioni per il db.

mio .my.cnf:

[client] 
user=root 
password=test 

faccio il login attraverso mysql -u root -h localhost -p, ma non posso effettuare il login senza l'opzione -p se ho il .my.cnf (non è un problema, ma dispari).

C'erano un sacco di utenti root, così mi sono liberato di loro e ho questi utenti:

mysql> SELECT host,user,password FROM mysql.user; 
+-----------+------------------+-------------------------------------------+ 
| host  | user    | password         | 
+-----------+------------------+-------------------------------------------+ 
| localhost | root    | ***************************************** | 
| localhost | debian-sys-maint | ***************************************** | 
+-----------+------------------+-------------------------------------------+ 

mysql> SHOW GRANTS FOR 'root'@'localhost'; 
+----------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                       | 
+----------------------------------------------------------------------------------------------------------------------+ 
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*****************************************' | 
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION               | 
+----------------------------------------------------------------------------------------------------------------------+ 

Ora, creo un db, un utente. L'ultima riga mostra un errore quando concedo le autorizzazioni. Puoi per favore farmi sapere perché sto ricevendo questo errore e cosa posso fare per farlo funzionare?

mysql> create database staging; 
Query OK, 1 row affected (0.00 sec) 

mysql> CREATE USER 'staging'@'localhost' IDENTIFIED BY 'test'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> GRANT ALL PRIVILEGES ON staging.* TO 'staging'@'localhost'; 
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'staging' 

risposta

30

primo luogo, individuare l'utente che si è connessi come:

select user(); select current_user(); 

Il risultato del primo comando è quello che si è tentato di effettuare il login come, il secondo è ciò che hai effettivamente collegato come. Conferma di aver effettuato l'accesso come [email protected] in mysql.

Il problema era che l'installazione che mi è venuta in mente non ha fornito Grant_priv a [email protected]. Ecco come puoi controllare.

mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; 
+-----------+------------------+-------------------------------------------+------------+------------+ 
| host  | user    | password         | Grant_priv | Super_priv | 
+-----------+------------------+-------------------------------------------+------------+------------+ 
| localhost | root    | ***************************************** | N   | Y   | 
| localhost | debian-sys-maint | ***************************************** | Y   | Y   | 
| localhost | staging   | ***************************************** | N   | N   | 
+-----------+------------------+-------------------------------------------+------------+------------+ 

È possibile vedere che Grant_priv è impostato su N per root @ localhost. Questo deve essere Y. Ecco come ho risolto in questo modo:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; 
FLUSH PRIVILEGES; 
GRANT ALL ON *.* TO 'root'@'localhost'; 

ho fatto ottenere qualche errore di autorizzazione, ma quando mi sono collegato indietro nel, andava bene.

+0

sì. sicuramente devi uscire e rientrare. grazie per l'aiuto! – Slayer6

9

cercano privilegi di lavaggio dopo le autorizzazioni di concessione

GRANT ALL PRIVILEGES ON staging.* TO 'staging'@'localhost' IDENTIFIED BY 'test'; 
FLUSH PRIVILEGES; 
+0

Ricevo l'errore quando concedo l'autorizzazione. 'FLUSH PRIVILEGES;' non farà alcuna differenza poiché il comando di concessione della concessione non è stato accettato. – Trewq

+0

vedi la mia risposta, l'ho aggiornata. Mettere IDENTIFICATO DA "test" dopo aver concesso – xiriusly

+0

Ho riscontrato lo stesso problema. Si lamenta che l'utente 'root' @ 'localhost' non ha il permesso ... C'è qualcosa che posso fare per verificare che la root abbia tutte le autorizzazioni? – Trewq

3

Per chi ancora imbattervi in ​​questo come ho fatto, vale la pena di controllo per assicurarsi che il tentato GRANT non esiste già:

SHOW GRANTS FOR username; 

Nel mio caso, l'errore non era in realtà perché c'era un permesso errore, ma perché il GRANT esisteva già.

Problemi correlati