Otázka :Již roky používám IDENTIFIED BY ‚password‘ spolu s příkazem GRANT v mnoha verzích MySQL. Totéž však selhalo v MySQL verze 8.0.26 v mé nové verzi CentOS Stream 8. Níže je kompletní chybová zpráva. V čem by mohl být problém? – 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
Chyba při používání GRANT s IDENTIFIED by password
Tushare, použití hesla IDENTIFIED BY s příkazem GRANT bylo od verze MySQL 5.7.6 zastaralé. To znamená, že musíte použít IDENTIFIED by password s CREATE USER nebo ALTER USER a použít GRANT PRIVILEGES, jak je uvedeno níže:
VYTVOŘTE UŽIVATELE a přiřaďte heslo.
mysql> CREATE USER 'quser'@'localhost' IDENTIFIED BY 'qc123'; Query OK, 0 rows affected (0.12 sec)
Přidat oprávnění pomocí GRANT:
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost'; Query OK, 0 rows affected (0.03 sec)
Proč tato změna v nejnovější verzi MySQL?
Změna má smysl z následujících důvodů:
- Pomocí
IDENTIFIED BY
heslo s oprávněními GRANT nastaví jakékoli heslo zadané jako nové heslo pro účet. Předpokládejme, že pokud již existuje účet s jiným heslem, provedením oprávnění GRANT spolu s heslem IDENTIFIED BY dojde k přepsání stávajícího hesla. Odebrání IDENTIFIED z GRANT tedy znamená, že účet zůstane s heslem, které bylo nastaveno při vytváření. - Od verze MySQL 5.7.2 platí, že pokud již účet existuje, je zakázáno IDENTIFIKOVANÉ „heslem“ a mělo by být používáno pouze při vytváření účtu, tj. s
CREATE USER
neboALTER USER
. - GRANT může vytvořit uživatelský účet, pokud neexistuje.
- Pokud
NO_AUTO_CREATE_USER enabled
- Pokud účet uvedený ve výpisu GRANT neexistuje, GRANT účet nevytvoří, pokud neprázdné heslo nezadáte pomocí IDENTIFIED BY nebo IDENTIFIED WITH.
- Pokud je
NO_AUTO_CREATE_USER disabled
- Pokud účet uvedený ve výpisu GRANT neexistuje, GRANT účet vytvoří. To může být nebezpečné, pokud není zadáno žádné heslo pomocí IDENTIFIED BY.
- Pokud
A konečně, GRANT s heslem IDENTIFIED BY bylo ukončeno a uživatelský účet je třeba vytvořit pomocí CREATE USER nebo ALTER USER.
přes StackOverflow.