So gewähren Sie einem Benutzer in MySQL die Berechtigung zum Erstellen von Datenbanken

10

Der folgende Befehl bietet alle Berechtigungen in allen Datenbanken für den Benutzer 'admin'. Es erlaubt 'admin' jedoch nicht, eine Datenbank zu erstellen.

GRANT ALL ON * . * TO 'admin'@'localhost'; 

Wie kann ich 'admin' den Zugriff zum Erstellen einer Datenbank gewähren?

Beim Versuch, eine Datenbank zu erstellen, wird der folgende Fehler angezeigt:

FEHLER 1044 (42000): Zugriff für Benutzer 'admin' @ 'localhost' auf Datenbank 'newdb' verweigert

Abhishek
quelle
Hast du benutzt GRANT ALL ON *.* TO 'admin'@'localhost';? In Ihrem Beispiel sagen Sie, dass Sie ausgeführt haben : GRANT ALL ON * . * TO 'admin'@'hostname';, aber hostnameein eindeutiger Host als localhost.
Am
Hostname ist 'localhost'.
Abhishek
Waren Sie als "root" verbunden, als Sie das ausgeführt haben GRANT?
Rick James
Ja. Ich war als "root" verbunden, als ich diesen GRANT ausführte.
Abhishek
Hast du es flush privileges;als root versucht ?
Dwjv

Antworten:

5

ALLE Berechtigungen enthalten "ALLE" außer "MIT GRANT-OPTION" ... Somit kann der Administrator mit dem obigen Befehl auch die Datenbank erstellen.

Möglicherweise möchten Sie den Fehler anzeigen, den Sie erhalten. Beachten Sie, dass Sie in GRANT oben nicht das Kennwort für den Administrator angegeben haben.

Aktualisieren:

Sie sollten in der Lage sein, Folgendes zu tun:

Melden Sie sich als root an und erstellen Sie einen Benutzer:

$] mysql -uroot -p
mysql> grant all privileges on *.* to 'admin'@'localhost';

Login als Admin (ohne Passwort):

$] mysql -uadmin -p
mysql> create database admin;

Wenn Sie sich anmelden, können Sie Ihre Berechtigungen wie folgt überprüfen:

mysql> show grants;

oder

mysql> show grants for current_user();

mysql> select current_user() zeigt Ihnen, Benutzer, als den Sie angemeldet sind.

mysql_user
quelle
Ich habe den Fehler in meiner Frage hinzugefügt.
Abhishek
@abhishek Update Antwort .... Übrigens, welcher Befehl verursacht den obigen Fehler? Überprüfen Sie, welche Zuschüsse Ihr Benutzer hat? Sind Sie sicher, dass Sie sich als Administrator verbinden?
mysql_user
Ja, ich bin zu 100% sicher, dass ich mich als Administrator verbinde.
Abhishek
mysql> show Grants; + --------------------------------------------- ---------------------------- + | Zuschüsse für admin @ localhost | + --------------------------------------------- ---------------------------- + | GEWÄHRLEISTUNG AN . TO 'admin' @ 'localhost' IDENTIFIZIERT DURCH PASSWORT <Sekret> | | GEWÄHRLEISTEN SIE ALLE PRIVILEGIEN newdb. * AN 'admin' @ 'localhost' | + --------------------------------------------- ---------------------------- + 2 Zeilen im Satz (0,00 Sek.)
Abhishek
Beachten Sie, dass Sie alle Privilegien nur auf mbdb haben ... so dass Sie nicht mit anderen db arbeiten können!
mysql_user
0

Ein neuer Benutzer hat keine Berechtigung, etwas mit den Datenbanken zu tun. Wenn ein neuer Benutzer versucht, sich anzumelden (mit dem Kennwort, dem Kennwort), kann er die MySQL-Shell nicht erreichen.

Daher müssen Sie dem Benutzer den Zugriff gewähren

GRANT ALL PRIVILEGES ON * . * TO 'admin'@'localhost'; 

Die Sternchen in diesem Befehl beziehen sich auf die Datenbank bzw. die Tabelle, auf die sie zugreifen können. Mit diesem speziellen Befehl kann der Benutzer alle Aufgaben in allen Datenbanken und Tabellen lesen, bearbeiten, ausführen und ausführen.

Wenn Sie die Berechtigungen festgelegt haben, die Sie für Ihre neuen Benutzer einrichten möchten, müssen Sie immer alle Berechtigungen neu laden.

FLUSH PRIVILEGES;

Jetzt wären alle Änderungen wirksam.

Mathew
quelle
Flush-Berechtigungen sind für GRANT-Befehle nicht erforderlich.
mysql_user
Ja ... ich stimme zu ... Aber FLUSH PRIVILAGES ist erforderlich, wenn wir die Gewährung von Tabellen direkt mithilfe von Anweisungen wie INSERT, UPDATE oder DELETE ändern ... Danke @mysql_user
Mathew