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

1014voto

diagonalbatman Punkte 16920
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

Auf diese Weise erstelle ich meine "Super User"-Berechtigungen (obwohl ich normalerweise einen Host angeben würde).

WICHTIGER HINWEIS

Diese Antwort kann zwar das Problem des Zugangs lösen, WITH GRANT OPTION erstellt einen MySQL-Benutzer, der die Berechtigungen anderer Benutzer bearbeiten .

Mit dem Privileg GRANT OPTION können Sie anderen Benutzern die Privilegien erteilen oder 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 einen Benutzer nur mit Datenbankprivilegien anlegen für diese Art der Verwendung.

565voto

akostadinov Punkte 16114

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 man Privilegien für eine einzelne Datenbank vergeben will.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

% scheint sich nicht auf die Socket-Kommunikation zu erstrecken, dass die localhost ist für. WITH GRANT OPTION ist nur für den Superuser gut, ansonsten ist es in der Regel ein Sicherheitsrisiko.

Update für MySQL 5.7+ scheint dies eine Warnung zu sein:

Verwendung der GRANT-Anweisung zum Ändern der Eigenschaften eines vorhandenen Benutzers mit Ausnahme von Privilegien zu ändern, ist veraltet und wird in einer zukünftigen Version entfernt werden. Verwenden Sie ALTER USER-Anweisung für diese Operation.

Das Passwort sollte also mit separaten Befehlen festgelegt werden. Danke für den Kommentar von @scary-wombat.

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

34 Stimmen

+1 für die Nichtberücksichtigung WITH GRANT OPTION und auf eine bestimmte Datenbank statt auf alle ( * ).

1 Stimmen

Beachten Sie, dass Sie den ersten Befehl wahrscheinlich nicht benötigen, es sei denn, Sie möchten Zugriff von externen IP-Adressen oder von anderen Computern im lokalen Subnetz erhalten. In diesem Fall empfehle ich Ihnen, Befehle zu verwenden, die auf die spezifischen IP-Adressen abzielen, die Sie zulassen möchten, z. B. myuser@192.168.0.1 (für eine Adresse im lokalen Subnetz), und nicht myuser@% im Allgemeinen.

0 Stimmen

@EvanDonovan, hier gibt es eine Menge Dinge, die sowohl vom Anwendungsfall als auch von der Umgebung abhängen. Zum Beispiel unterstützt der Java-Treiber den Socket-Transport überhaupt nicht (IIRC). Aber im Allgemeinen stimme ich zu - besser spezifische IPs angeben, wenn möglich, oder den Server nur auf 127.0.0.1 und den Server mit einer Firewall schützen, wenn er einen anderen als den lokalen Host abhört.

149voto

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, etwas mit den Datenbanken zu tun. Wenn newuser sogar versucht, sich anzumelden (mit dem Kennwort password), ist er nicht in der Lage, die MySQL-Shell zu erreichen.

Daher ist es wichtig, dass der Nutzer Zugang zu den Informationen erhält, die er benötigt.

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

Die Sternchen in diesem Befehl beziehen sich auf die Datenbank bzw. 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 werden 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-Werkbank , Navicat o SQLyog

7 Stimmen

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

3 Stimmen

Entweder haben Sie im großen Stil von Linode kopiert, oder sie haben von Ihnen kopiert: linode.com/docs/databases/mysql/

0 Stimmen

Ich musste mich wieder identifizieren mit GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION; (seltsam..., aber wahr)

35voto

Bhavnesh Punkte 421

 1. Erstellen Sie die Datenbank

CREATE DATABASE db_name;

 2. Erstellen Sie den Benutzernamen für die Datenbank db_name

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3. Verwenden Sie die Datenbank

USE db_name;

 4. Schließlich befinden Sie sich in der Datenbank db_name und führen dann die Befehle wie create, select und insert aus.

24voto

s6712 Punkte 486

Dieses SQL gewährt auf alle Datenbanken nur die grundlegenden Berechtigungen. Sie reichen für Drupal oder Wordpress aus und erlauben als Nettigkeit ein Entwicklerkonto für lokale Projekte.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

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