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 keine Tabellen erstellen.
Gewährung aller Berechtigungen für diese Datenbank und (in Zukunft) Tabellen. Ich kann keine Tabellen in der '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 Superuser-Berechtigungen (obwohl ich normalerweise einen Host angeben würde).
Während diese Antwort das Problem des Zugriffs lösen kann, erstellt WITH GRANT OPTION
einen MySQL-Benutzer, der die Berechtigungen anderer Benutzer bearbeiten kann .
Mit dem GRANT OPTION-Privileg können Sie anderen Benutzern die Berechtigungen erteilen, die Sie selbst besitzen.
Aus Sicherheitsgründen sollten Sie diese Art von Benutzerkonto nicht für Prozesse verwenden, auf die die Öffentlichkeit Zugriff hat (d. H. Eine Website). Es wird empfohlen, dass Sie einen Benutzer mit Datenbankberechtigungen erstellen für diese Art der Verwendung.
Dies ist eine alte Frage, aber ich glaube nicht, dass die akzeptierte Antwort sicher ist. Es ist gut für das Erstellen eines Super-Benutzers, aber nicht gut, wenn Sie Berechtigungen für eine einzelne Datenbank erteilen möchten.
grant all privileges on mydb.* to [email protected]'%' identified by 'mypasswd';
grant all privileges on mydb.* to [email protected] identified by 'mypasswd';
%
scheint die Socket-Kommunikation nicht zu umfassen, für die die localhost
ist. WITH GRANT OPTION
ist nur für den Superbenutzer gut, ansonsten besteht normalerweise ein Sicherheitsrisiko.
Hoffe das hilft.
Dies wird für manche Menschen hilfreich sein:
Von der MySQL-Befehlszeile aus:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
An diesem Punkt hat newuser leider keine Berechtigung, etwas mit den Datenbanken zu tun. Wenn ein neuer Benutzer sich sogar anzumelden versucht (mit dem Kennwort und dem Kennwort), kann er die MySQL-Shell nicht erreichen.
Daher müssen Sie als Erstes dem Benutzer Zugriff auf die Informationen geben, 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 Befehl können Benutzer alle Aufgaben in allen Datenbanken und Tabellen lesen, bearbeiten, ausführen und ausführen.
Nachdem Sie die Berechtigungen festgelegt haben, die Sie für Ihre neuen Benutzer einrichten möchten, müssen Sie immer alle Berechtigungen erneut laden.
FLUSH PRIVILEGES;
Ihre Änderungen werden jetzt wirksam.
Weitere Informationen: http://dev.mysql.com/doc/refman/5.6/de/grant.html
Wenn Sie mit der Befehlszeile nicht vertraut sind, können Sie einen Client wie MySQL Workbench , Navicat oder SQLyog verwenden.
1. Erstellen Sie die Datenbank
CREATE DATABASE db_name;
2. Erstellen Sie den Benutzernamen für die Datenbank Datenbankname
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
3. Verwenden Sie die Datenbank
USE db_name;
4. Sie befinden sich schließlich in der Datenbank db_name und führen dann die Befehle aus, z.
Diese SQL gewährt auf alle Datenbanken nur grundlegende Berechtigungen. Sie sind für Drupal oder Wordpress ausreichend und erlauben aus einem einzigen Entwickler-Konto einen lokalen Account.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
INDEX, ALTER, CREATE TEMPORARY TABLES
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO [email protected] IDENTIFIED BY 'mypasswd';
Funktioniert für Privilegien im Schema :)
Optional: Nach mypasswd
können Sie WITH GRANT OPTION
hinzufügen.
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 [email protected]'%'
WITH GRANT OPTION;
und dann
FLUSH PRIVILEGES;
Ich konnte es nur durch Hinzufügen von GRANT OPTION
zum Laufen bringen, ohne dass die Fehlermeldung immer verweigert wurde
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
Nur Zugriff vom Remote-Server auf die Mydb-Datenbank
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
Zugriff vom Remote-Server auf alle Datenbanken.
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
Um alle Berechtigungen in der Datenbank zu erteilen: mydb
für den Benutzer: myuser
, führen Sie einfach Folgendes aus:
GRANT ALL ON mydb.* TO 'myuser'@'localhost';
oder:
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
Das Schlüsselwort PRIVILEGES
ist nicht erforderlich.
Ich weiß auch nicht, warum die anderen Antworten darauf hinweisen, dass der IDENTIFIED BY 'password'
am Ende des Befehls steht. Ich glaube, dass es nicht erforderlich ist.