webentwicklung-frage-antwort-db.com.de

"IDENTIFIED BY 'Passwort'" in MySQL

In vielen MySQL-Tutorials sehe ich oft, dass die Benutzer den Befehl IDENTIFIED BY 'password' sowohl beim Erstellen als auch beim Erteilen von Berechtigungen verwenden. 

Zum Beispiel:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';

Ich habe versucht, GRANT ohne IDENTIFIED BY zu verwenden, und es funktioniert.
Kann mir jemand erklären, warum er zweimal verwendet wird? Könnte es ein anderes Passwort für bestimmte Privilegien geben?

15
user3461823

GRANT dient zum Hinzufügen von Berechtigungen für Benutzer. Verwirrenderweise hat es auch die Möglichkeit, Benutzer anzulegen und ihre Passwörter zu ändern. Diese Funktionalität ist veraltet und sollte nicht verwendet werden.

Wenn Sie GRANT mit IDENTIFIED verwenden, können Sie das Kennwort des Benutzers ändern:

Wenn IDENTIFIED vorhanden ist und Sie über das globale Gewährungsrecht verfügen (GRANT OPTION), wird jedes angegebene Kennwort zum neuen Kennwort für das Konto, auch wenn das Konto bereits existiert und bereits ein Kennwort enthält. Ohne IDENTIFIED bleibt das Kontopasswort unverändert.

Ab MySQL 5.7.2 ist IDENTIFIED WITH verboten, da das Konto bereits vorhanden ist, da es nur für die Erstellung neuer Konten vorgesehen ist.

Außerdem kann GRANT den Benutzer erstellen, wenn er nicht vorhanden ist:

Wenn kein in einer GRANT-Anweisung angegebenes Konto vorhanden ist, hängt die durchgeführte Aktion vom SQL-Modus NO_AUTO_CREATE_USER ab:

  • Wenn NO_AUTO_CREATE_USER nicht aktiviert ist, erstellt GRANT das Konto. Dies ist sehr unsicher, wenn Sie nicht mit IDENTIFIED BY ein nicht leeres Kennwort angeben.
  • Wenn NO_AUTO_CREATE_USER aktiviert ist, schlägt GRANT fehl und erstellt das Konto nicht, es sei denn, Sie geben ein nicht leeres Kennwort mit IDENTIFIED BY an oder geben ein Authentifizierungs-Plugin mit IDENTIFIED WITH an.

Die Verwendung von GRANT zum Definieren von Kontoauthentifizierungsmerkmalen ist ab MySQL 5.7.6 veraltet. Erstellen oder ändern Sie stattdessen Authentifizierungsmerkmale mit CREATE USER oder ALTER USER. Diese GRANT-Funktion wird in einer zukünftigen MySQL-Version entfernt.

Siehe https://dev.mysql.com/doc/refman/5.7/en/grant.html

Zusammenfassend verwenden Sie CREATE, um einen Benutzer zu erstellen, und verwenden Sie GRANT, um Berechtigungen hinzuzufügen:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost'; 
22
SystemParadox

Wenn Sie den selbst erstellten Benutzer gewähren, reicht die folgende Zeile aus, um

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

Hinweis: Geben Sie an, ob Ihr Kennwort das Kennwort enthält, das Sie für die Überprüfung der Berechtigungsnachweise speichern möchten.

3
Zafar Malik

Es ist nur eine zusätzliche Sicherheitsmaßnahme. Möglicherweise haben Sie unterschiedliche Kennwörter für denselben Benutzer auf verschiedenen Servern, beispielsweise in einer gemeinsam genutzten Host-Umgebung. Wenn es sich um Ihren eigenen Server handelt und nur Sie und Ihre Kollegen diesen Server verwenden, müssen Sie nicht die Benutzer identifizieren, denen Sie Berechtigungen gewähren. 

Wenn Sie Benutzer identifizieren, kann nur das von Ihnen angegebene Kennwort für diesen Benutzer zum Ausführen dieser Berechtigungen verwendet werden.

0
Robbie Averill