Frage :Ich verwende IDENTIFIED BY ‚password‘ zusammen mit der GRANT-Anweisung seit Jahren in vielen MySQL-Versionen. Dasselbe ist jedoch in MySQL-Version 8.0.26 auf meiner neuen CentOS Stream-Version 8 fehlgeschlagen. Unten finden Sie die vollständige Fehlermeldung. Was könnte das Problem sein? – Tushar.
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost' IDENTIFIED BY 'qcuser123'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near IDENTIFIED BY 'quser123' at line 1
Fehler bei der Verwendung von GRANT mit IDENTIFIED by password
Tushar, die Verwendung des IDENTIFIED BY-Passworts mit der GRANT-Anweisung ist seit MySQL-Version 5.7.6 veraltet. Dies bedeutet, dass Sie IDENTIFIED by password mit CREATE USER oder ALTER USER verwenden und GRANT PRIVILEGES wie unten gezeigt anwenden müssen:
BENUTZER ERSTELLEN und Passwort vergeben.
mysql> CREATE USER 'quser'@'localhost' IDENTIFIED BY 'qc123'; Query OK, 0 rows affected (0.12 sec)
Fügen Sie Berechtigungen mit GRANT hinzu:
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost'; Query OK, 0 rows affected (0.03 sec)
Warum diese Änderung im neusten MySQL?
Die Änderung ist aus folgenden Gründen sinnvoll:
- Mit
IDENTIFIED BY
password mit GRANT-Berechtigungen wird jedes angegebene Passwort als neues Passwort für das Konto festlegen. Angenommen, es gibt bereits ein Konto mit einem anderen Passwort, und die Ausführung von GRANT-Privilegien zusammen mit dem IDENTIFIED BY-Passwort überschreibt das vorhandene Passwort. Das Entfernen von IDENTIFIED aus GRANT bedeutet also, dass das Konto mit dem Passwort bleibt, das während der Erstellung festgelegt wurde. - Ab MySQL-Version 5.7.2 ist IDENTIFIED by ‘password’ verboten, wenn bereits ein Konto vorhanden ist, und es sollte nur während der Kontoerstellung verwendet werden, d. h. mit
CREATE USER
oderALTER USER
. - GRANT kann ein Benutzerkonto erstellen, falls es noch nicht existiert.
- Falls
NO_AUTO_CREATE_USER enabled
- Wenn ein in der GRANT-Anweisung angegebenes Konto nicht existiert, kann GRANT kein Konto erstellen, es sei denn, das nicht leere Passwort wird über IDENTIFIED BY oder über IDENTIFIED WITH angegeben.
- Falls
NO_AUTO_CREATE_USER disabled
- Wenn ein in der GRANT-Anweisung angegebenes Konto nicht existiert, erstellt GRANT das Konto. Dies kann unsicher sein, wenn kein Passwort über IDENTIFIED BY. angegeben wird
- Falls
Schließlich ist GRANT mit IDENTIFIED BY-Passwort veraltet und das Benutzerkonto muss mit CREATE USER oder ALTER USER erstellt werden.
über StackOverflow.