Pregunta :He estado usando IDENTIFICADO POR 'contraseña' junto con la instrucción GRANT durante años en muchas versiones de MySQL. Sin embargo, lo mismo falló en la versión 8.0.26 de MySQL en mi nueva versión 8 de CentOS Stream. A continuación se muestra el mensaje de error completo. ¿Cual podría ser el 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
Error al usar GRANT con IDENTIFIED by password
Tushar, el uso de la contraseña IDENTIFIED BY con la declaración GRANT ha quedado obsoleto desde la versión 5.7.6 de MySQL. Significa que debe usar IDENTIFICADO por contraseña con CREAR USUARIO o ALTERAR USUARIO y aplicar OTORGAR PRIVILEGIOS como se muestra a continuación:
CREAR USUARIO y asignarle una contraseña.
mysql> CREATE USER 'quser'@'localhost' IDENTIFIED BY 'qc123'; Query OK, 0 rows affected (0.12 sec)
Agregar privilegios usando GRANT:
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost'; Query OK, 0 rows affected (0.03 sec)
¿Por qué este cambio en la última versión de MySQL?
El cambio tiene sentido por las siguientes razones:
- Usando
IDENTIFIED BY
La contraseña con privilegios GRANT establecerá cualquier contraseña especificada como la nueva contraseña para la cuenta. Supongamos que si ya existe una cuenta con una contraseña diferente, la ejecución de los privilegios GRANT junto con la contraseña IDENTIFIED BY sobrescribirá la contraseña existente. Por lo tanto, eliminar IDENTIFIED de GRANT significa que la cuenta permanece con la contraseña que se estableció durante la creación. - A partir de la versión 5.7.2 de MySQL, si ya existe una cuenta, está prohibido IDENTIFICARSE con una 'contraseña' y debe usarse solo durante la creación de la cuenta, es decir, con
CREATE USER
oALTER USER
. - GRANT puede crear una cuenta de usuario si no existe.
- Si
NO_AUTO_CREATE_USER enabled
- Si una cuenta especificada en la instrucción GRANT no existe, GRANT no podrá crear una cuenta a menos que se especifique una contraseña no vacía a través de IDENTIFICADO POR o IDENTIFICADO CON.
- Si
NO_AUTO_CREATE_USER disabled
- Si una cuenta especificada en la instrucción GRANT no existe, GRANT crea la cuenta. Esto puede ser inseguro si no se especifica una contraseña a través de IDENTIFICADO POR.
- Si
Finalmente, GRANT con IDENTIFIED BY contraseña ha quedado obsoleto y la cuenta de usuario debe crearse usando CREATE USER o ALTER USER.
a través de StackOverflow.