2013-10-08 16 views
12

Ich habe mysql Server Version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu) Linux Ubuntu 12.04 LTS installiert.kann keine Berechtigungen für MySQL-Datenbank

Ich scheinen alle Berechtigungen als root zu haben. Ich kann einen Benutzer und eine Datenbank erstellen. Allerdings kann ich dem Benutzer nicht alle Berechtigungen für die Datenbank geben.

Mein .my.cnf:

[client] 
user=root 
password=test 

I anmelden durch mysql -u root -h localhost -p, aber ich kann ohne die -p Option nicht anmelden, obwohl ich die .my.cnf (nicht ein Problem, aber ungerade).

Es gab eine Reihe von Root-Benutzern, so habe ich sie los, und ich habe diese Benutzer:

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               | 
+----------------------------------------------------------------------------------------------------------------------+ 

Nun erstelle ich eine db, einen Benutzer. Die letzte Zeile zeigt einen Fehler, wenn ich Berechtigungen erteile. Können Sie mir bitte mitteilen, warum ich diesen Fehler bekomme und was ich tun kann, damit dies funktioniert?

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' 

Antwort

30

Zuerst Identifizieren Sie den Benutzer, den Sie in angemeldet sind:

select user(); select current_user(); 

Das Ergebnis für den ersten Befehl ist, was Sie zum Anmeldeversuch als, das zweite ist, was Sie tatsächlich als verbunden sind. Bestätigen Sie, dass Sie in mysql als [email protected] angemeldet sind.

Das Problem war, dass die Installation, die ich kam, Grant_priv[email protected] nicht zur Verfügung stellte. Hier ist, wie Sie überprüfen können.

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   | 
+-----------+------------------+-------------------------------------------+------------+------------+ 

Sie können sehen, dass die Grant_priv für root @ localhost auf N gesetzt ist. Dies muss hier Y. ist, wie ich dieses Problem behoben:

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

habe ich einige Fehler Erlaubnis bekommen, aber wenn ich wieder angemeldet, es war in Ordnung.

+0

ja. unbedingt abmelden und wieder rein. Danke für die Hilfe! – Slayer6

9

versuchen Spülung Privilegien nach Gewährung Berechtigungen

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

Ich bekomme den Fehler, wenn ich die Erlaubnis erteile. 'FLUSH PRIVILEGES;' wird keinen Unterschied machen, da der Grant-Erlaubnis-Befehl nicht akzeptiert wurde. – Trewq

+0

sehe meine Antwort, ich aktualisierte es. Setzen Sie IDENTIFIED von "Test" nach der Gewährung – xiriusly

+0

Ich bekomme das gleiche Problem. Es beschwert sich über Benutzer 'root' @ 'localhost', der keine Erlaubnis hat ... Gibt es etwas, das ich tun kann, um zu überprüfen, dass die Wurzel alle Genehmigungen hat? – Trewq

3

Für diejenigen, die auf diese stolpern noch wie ich, es ist die Überprüfung wert, um sicherzustellen, das versucht GRANT nicht bereits vorhanden ist:

SHOW GRANTS FOR username; 

In meinem Fall der Fehler nicht wirklich war, weil es eine Erlaubnis war Fehler, aber weil die GRANT bereits existiert.

Verwandte Themen