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 aus in die Datenbank einloggen, aber ich kann keine Tabellen erstellen.
Wie kann ich alle Rechte für die Datenbank und (in Zukunft) für die Tabellen erteilen. Ich kann keine Tabellen in 'mydb' Datenbank 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'
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
So erstelle ich meine "Super User" Privilegien (obwohl ich normalerweise einen Host angeben würde).
Während diese Antwort das Problem des Zugriffs lösen kann, erzeugt WITH GRANT OPTION
einen MySQL-Benutzer, der [die Berechtigungen anderer Benutzer bearbeiten kann] (https://dev.mysql.com/doc/refman/5.6/en/privileges-provided.html#priv_grant-option).
Das GRANT OPTION-Recht ermöglicht es Ihnen, anderen Benutzern die Rechte zu geben oder zu entziehen, die Sie selbst besitzen.
Aus Sicherheitsgründen sollten Sie diese Art von Benutzerkonto nicht für einen Prozess verwenden, zu dem die Öffentlichkeit Zugang hat (z. B. eine Website). Es wird empfohlen, dass Sie für diese Art der Verwendung einen Benutzer mit reinen Datenbankprivilegien anlegen.
Dies ist eine alte Frage, aber ich glaube nicht, dass die akzeptierte Antwort sicher ist. Es ist gut, um einen Superuser zu erstellen, aber nicht gut, wenn Sie Rechte für eine einzelne Datenbank vergeben wollen.
grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
%
scheint nicht die Socket-Kommunikation abzudecken, für die der localhost
ist. WITH GRANT OPTION
ist nur für den Superuser gut, ansonsten ist es normalerweise ein Sicherheitsrisiko.
Hoffentlich hilft das.
Dies wird für einige Menschen hilfreich sein:
Von der MySQL-Befehlszeile aus:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Leider hat newuser zu diesem Zeitpunkt keine Berechtigung, irgendetwas mit den Datenbanken zu tun. Wenn newuser sogar versucht, sich anzumelden (mit dem Passwort password), kann er die MySQL-Shell nicht erreichen.
Daher muss der Benutzer als erstes Zugang zu den Informationen erhalten, die er benötigt.
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'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 durchführen.
Sobald Sie die Berechtigungen, die Sie für Ihre neuen Benutzer einrichten wollen, festgelegt haben, müssen Sie immer alle Berechtigungen neu laden.
FLUSH PRIVILEGES;
Ihre Änderungen sind nun wirksam.
Für weitere Informationen: http://dev.mysql.com/doc/refman/5.6/en/grant.html
Wenn Sie mit der Kommandozeile nicht vertraut sind, können Sie einen Client wie MySQL Workbench, Navicat oder SQLyog verwenden.