phpMyAdmin en MySQL 8.0
database-connection mysql-8.0 (12)
Como muchos han señalado en otras respuestas, cambiar el complemento de autenticación predeterminado de MySQL a Native hace el truco.
Aún así, como no puedo usar el nuevo complemento caching_sha2_password , esperaré hasta que se desarrolle la compatibilidad para cerrar el tema.
He instalado el servidor MySQL 8.0 y phpMyAdmin, pero cuando intento acceder a él desde el navegador se producen los siguientes errores:
#2054 - The server requested authentication method unknown to the client
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client
Me imagino que debe tener algo que ver con las contraseñas seguras implementadas y la relativa frescura de la versión de MySQL.
Pero no sé nada de la configuración más avanzada de controladores y conexiones.
¿Alguien ha enfrentado el mismo problema y lo ha resuelto? :RE
Editar
instalado con apt
apt-get install mysql-server phpmyadmin
Como se mencionó @kgr, MySQL 8.0.11 realizó algunos cambios en el método de autenticación.
He abierto un informe de error de phpMyAdmin sobre esto: https://github.com/phpmyadmin/phpmyadmin/issues/14220 .
MySQL 8.0.4-rc funcionaba bien para mí, y creo que es ridículo que MySQL haga tal cambio en una versión de nivel de parche.
El nuevo MySQL 8.0.11 está usando caching_sha2_password
como método de autenticación predeterminado. Creo que phpMyAdmin no puede entender este método de autenticación. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY ''passw0rd''
crear un usuario con uno de los métodos de autenticación más antiguos, por ejemplo, CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY ''passw0rd''
.
Más aquí https://dev.mysql.com/doc/refman/8.0/en/create-user.html y aquí https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html
Fui al sistema
preferencias -> mysql -> inicializar base de datos -> usar cifrado de contraseña heredada (en lugar de fuerte) -> ingresó la misma contraseña
como mi archivo config.inc.php
, reinició el servidor apache y funcionó. Todavía sospechaba de ello, así que detuve el servidor apache y mysql, los volví a iniciar y ahora está funcionando.
Inicie sesión en la consola MySQL con usuario root :
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
y cambie el complemento de autenticación con la contraseña allí:
mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY ''PASSWORD'';
Query OK, 0 rows affected (0.08 sec)
Puede leer más información sobre el complemento de autenticación preferido en el Manual de referencia de MySQL 8.0
Funciona perfectamente en un entorno de acoplamiento:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -p 3306:3306 -d mysql:latest
docker exec -it mysql bash
mysql -u root -pPASSWORD
ALTER USER root IDENTIFIED WITH mysql_native_password BY ''PASSWORD'';
exit
exit
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest
Así que ahora puede iniciar sesión en phpMyAdmin en http: // localhost: 8080 con root / PASSWORD
mysql / mysql-server
Si está usando mysql/mysql-server docker image
Pero recuerde, es solo una solución "rápida y sucia" en el entorno de desarrollo. No es aconsejable cambiar el https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password .
docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY ''PASSWORD'';"
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest
Solución actualizada al 10/04/2018
Cambie el complemento de autenticación predeterminado de MySQL haciendo un comentario sobre la configuración default_authentication_plugin=mysql_native_password
en /etc/my.cnf
Úselo bajo su propio riesgo
docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e ''s/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g'' /etc/my.cnf
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest
Otra idea: mientras phpmyadmin y otras herramientas de php no funcionen con él, simplemente agregue esta línea a su archivo /etc/mysql/my.cnf
default_authentication_plugin = mysql_native_password
Ver también: Mysql Ref.
Sé que esto es un problema de seguridad, pero ¿qué hacer si las herramientas no funcionan con caching_sha2_password?
Para solucionar este problema, acabo de ejecutar una consulta en mi consola mysql
.
Para esto inicie sesión en la consola mysql usando este
mysql -u {username} -p{password}
Después de esto, simplemente ejecuto una consulta como se indica a continuación:
ALTER user ''{USERNAME}''@''localhost'' identified with mysql_native_password by ''{PASSWORD}'';
cuando ejecuto esta consulta recibí un mensaje que se ejecutó la consulta. Luego inicie sesión en PHPMYADMIN con nombre de usuario / contraseña.
Resolví este problema haciendo lo siguiente:
- Agregue
default_authentication_plugin = mysql_native_password
a la
[mysqld] sección de my.cnf - Ingrese mysql y cree un nuevo usuario haciendo algo como
CREATE USER ''root''@''localhost'' IDENTIFIED BY ''password'';
- Otorgue privilegios según sea necesario. Por ejemplo,
GRANT ALL PRIVILEGES ON * . * TO ''root''@''localhost'';
GRANT ALL PRIVILEGES ON * . * TO ''root''@''localhost'';
y luego losFLUSH PRIVILEGES;
- Inicie sesión en phpmyadmin con nuevo usuario
Resolví este problema haciendo lo siguiente:
Entrar a las preferencias del sistema -> mysql
Seleccione "Inicializar base de datos" e ingrese una nueva contraseña de root seleccionando "Usar cifrado de contraseña heredada".
Inicie sesión en phpmyadmin con la nueva contraseña.
Resolví esto con MySQL 8.0.12 ejecutando:
mysql_upgrade -u root
Resolví mi problema básicamente con la respuesta de András:
1- Inicie sesión en la consola MySQL con usuario root:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
Y escriba la contraseña de la raíz para autenticar.
2- Creé un nuevo usuario:
mysql> CREATE USER ''user''@''hostname'' IDENTIFIED BY ''password'';
3- Concede todos los privilegios al nuevo usuario:
mysql> GRANT ALL PRIVILEGES ON *.* To ''user''@''hostname'';
4- Cambie el complemento de autenticación con la contraseña:
mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY ''PASSWORD'';
Ahora, phpmyadmin funciona bien registrando al nuevo usuario.
Si está utilizando el contenedor oficial de mysql docker, hay una solución simple:
Agregue la siguiente línea a su servicio de composición acoplable:
command: --default-authentication-plugin=mysql_native_password
Ejemplo de configuración:
mysql:
image: mysql:8
networks:
- net_internal
volumes:
- mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=db
command: --default-authentication-plugin=mysql_native_password