689 Stimmen

MySQL: Erteile **alle** Rechte auf der Datenbank

Ich habe eine Datenbank erstellt, zum Beispiel 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

Jetzt kann ich mich von überall in die Datenbank einloggen, aber keine Tabellen erstellen.

Wie kann ich alle Berechtigungen für diese Datenbank und (in Zukunft) für die Tabellen gewähren? Ich kann keine Tabellen in der Datenbank "mydb" erstellen. Ich bekomme immer:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

5 Stimmen

Sie sollten Folgendes verwenden FLUSH PRIVILEGES; nur, wenn Sie die Fördertabellen direkt mit Anweisungen wie INSERT , UPDATE , oder DELETE

22voto

Dutch Glory Punkte 19363
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

Funktioniert für Privilegien auf Schema :)

Optional: nach mypasswd können Sie hinzufügen WITH GRANT OPTION

18voto

GnanaPrakash Punkte 336

Ich konnte es nur zum Laufen bringen, indem ich Folgendes hinzufügte GRANT OPTION , ohne das immer der Fehler "Erlaubnis verweigert" auftritt

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

16voto

gastonnina Punkte 559

Hallo Ich habe diesen Code verwendet, um den Superuser in mysql zu haben

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

und dann

FLUSH PRIVILEGES;

12 Stimmen

flush privileges wird nicht benötigt, wenn Sie grant Befehle. x4

0 Stimmen

Hinweis: Die genaue Liste in der GRANT variiert zwischen den verschiedenen Versionen von MySQL.

10voto

Promise Preston Punkte 15324

Ich hatte diese Herausforderung bei der Arbeit an MySQL Ver 8.0.21

Ich wollte Berechtigungen für eine Datenbank namens my_app_db zum root Benutzer, der auf localhost Gastgeber.

Aber wenn ich den Befehl ausführe:

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

Ich erhalte die Fehlermeldung:

FEHLER 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; lesen Sie im Handbuch zu Ihrer MySQL-Serverversion nach, um die richtige Syntax in der Nähe von 'my_app_db.* TO 'Root'@'localhost'' in Zeile 1> zu verwenden.

So habe ich das Problem behoben :

Melden Sie sich an Ihrer MySQL-Konsole an. Sie können ändern root zum Benutzer mit dem Sie sich anmelden möchten:

mysql -u root -p

Geben Sie Ihr mysql Root-Passwort

Als Nächstes listen Sie alle Benutzer und ihre Hosts auf dem MySQL-Server auf. Anders als bei PostgreSQL wird dies oft in der mysql Datenbank. Wir müssen also die mysql Datenbank zuerst:

use mysql;
SELECT user, host FROM user;

Hinweis : Wenn Sie nicht die use mysql erhalten Sie die no database selected Fehler.

Dies sollte Ihnen eine Ausgabe in dieser Art liefern:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

Als Nächstes gewähren Sie dem gewünschten Benutzer auf der Grundlage der in der Liste enthaltenen Informationen Berechtigungen. Wir müssen zunächst die Datenbank auswählen, bevor wir ihr die Berechtigung erteilen. Ich verwende die root Benutzer, der auf dem localhost Gastgeber:

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

Hinweis : Die GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost'; Befehl funktioniert möglicherweise nicht für moderne Versionen von MySQL. Die meisten modernen Versionen von MyQL ersetzen den database_name con * en el Privilegien vergeben nachdem Sie die Datenbank ausgewählt haben, die Sie verwenden möchten.

Sie können dann die MySQL-Konsole verlassen:

exit

Das war's.

Ich hoffe, das hilft

7voto

Developer Punkte 3577

Um von einem entfernten Server nur auf die Datenbank mydb zuzugreifen

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

Für den Zugriff von einem entfernten Server auf alle Datenbanken.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X