Domanda :Uso IDENTIFIED BY 'password' insieme all'istruzione GRANT da anni in molte versioni di MySQL. Tuttavia, lo stesso non è riuscito in MySQL versione 8.0.26 sulla mia nuova versione 8 di CentOS Stream. Di seguito è riportato il messaggio di errore completo. Quale potrebbe essere il problema? – 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
Errore durante l'utilizzo di GRANT con IDENTIFIED by password
Tushar, l'uso della password IDENTIFIED BY con l'istruzione GRANT è stato deprecato dalla versione MySQL 5.7.6. Significa che devi utilizzare IDENTIFIED by password con CREATE USER o ALTER USER e applicare GRANT PRIVILEGES come mostrato di seguito:
CREA UTENTE e assegna una password.
mysql> CREATE USER 'quser'@'localhost' IDENTIFIED BY 'qc123'; Query OK, 0 rows affected (0.12 sec)
Aggiungi privilegi utilizzando GRANT:
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost'; Query OK, 0 rows affected (0.03 sec)
Perché questo cambiamento nell'ultimo MySQL?
La modifica ha senso per i seguenti motivi:
- Utilizzo di
IDENTIFIED BY
password con privilegi GRANT imposterà qualsiasi password specificata come nuova password per l'account. Si supponga che se esiste già un account con una password diversa, l'esecuzione dei privilegi GRANT insieme a IDENTIFIED BY password sovrascriverà la password esistente. Quindi rimuovere IDENTIFIED da GRANT significa che l'account rimane con la password impostata durante la creazione. - A partire dalla versione MySQL 5.7.2, se esiste già un account, IDENTIFIED by 'password' è vietato e dovrebbe essere utilizzato solo durante la creazione dell'account, ad esempio con
CREATE USER
oALTER USER
. - GRANT può creare un account utente se non esiste.
- Se
NO_AUTO_CREATE_USER enabled
- Se un account specificato nell'istruzione GRANT non esiste, GRANT non riuscirà a creare un account a meno che la password non vuota non sia specificata tramite IDENTIFIED BY o tramite IDENTIFIED WITH.
- Se
NO_AUTO_CREATE_USER disabled
- Se un account specificato nell'istruzione GRANT non esiste, GRANT crea l'account. Questo può non essere sicuro se non viene specificata alcuna password tramite IDENTIFIED BY.
- Se
Infine, GRANT with IDENTIFIED BY password è stato ritirato e l'account utente deve essere creato utilizzando CREATE USER o ALTER USER.
tramite StackOverflow.