Estoy usando php mysqli_connect
para iniciar sesión en una base de datos MySQL (todo en localhost)
<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_HOST', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if(!$dbc){
die('error connecting to database');
}
?>
Archivo ini del servidor MySQL:
[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password
con caching_sha2_password
en el archivo ini servidor MySQL, no es posible en absoluto a la sesión con usuario1 usuario2 o;
error: mysqli_connect (): El servidor solicitó un método de autenticación desconocido para el cliente [caching_sha2_password] en ...
con mysql_native_password
en el archivo ini de MySQL Server, es posible iniciar sesión con user1, pero con user2, el mismo error;
¿Cómo puedo iniciar sesión caching_sha2_password
en mySql Server?
mysqli
.Respuestas:
A partir de PHP 7.4, esto ya no es un problema. Se
caching_sha2
ha agregado soporte para el método de autenticación a mysqlnd.Actualmente, la extensión PHP mysqli no admite la nueva función de autenticación caching_sha2. Tienes que esperar hasta que publiquen una actualización.
Consulte la publicación relacionada de los desarrolladores de MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
No mencionaron PDO, tal vez debería intentar conectarse con PDO.
fuente
mysql_native_password
como lo sugieren algunas respuestas.Resuelvo esto con el comando SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
al que se hace referencia en https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
si está creando un nuevo usuario
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
al que hace referencia https://dev.mysql.com/doc/refman/8.0/en/create-user.html
esto funciona para mi
fuente
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Quite las comillas (') después
ALTER USER
y mantenga la cita (') despuésmysql_native_password BY
También me está funcionando.
fuente
Si está en Windows y no es posible utilizarlo
caching_sha2_password
en absoluto, puede hacer lo siguiente:El instalador realizará todos los cambios de configuración necesarios para usted.
fuente
Me está funcionando (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64bits)
Edite el archivo
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Restablecer el servicio MySQL en Windows y en MySQL Shell ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
fuente
Como mucha gente, he tenido el mismo problema. Aunque el usuario está configurado para usar mysql_native_password, y puedo conectarme desde la línea de comando, la única forma en que puedo hacer que mysqli () se conecte es agregar
a la sección [mysqld] de, en mi configuración en ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
fuente
Ejecuté el siguiente comando
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
en la línea de comandos y finalmente reinicié MySQL en los servicios locales.fuente
'root' @ 'localhost'
deben leer espacios aquí en su lugarALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Ahora puede actualizar a PHP7.4 y MySQL irá
caching_sha2_password
de forma predeterminada, por lo que la instalación predeterminada de MySQL funcionarámysqli_connect
sin necesidad de configuración.fuente
Si está en una Mac, aquí le mostramos cómo solucionarlo. Esto es después de toneladas de prueba y error. Espero que esto ayude a otros ...
Depuración:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Resolución: nano /usr/local/etc/my.cnf
Agregar: default-authentication-plugin = mysql_native_password
------- # Default Homebrew MySQL server config [mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 default-authentication-plugin=mysql_native_password ------
Finalmente ejecutar: brew services reiniciar mysql
fuente
Probé esto en Ubuntu 18.04 y es la única solución que funcionó para mí:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
fuente
Creo que no es útil configurar el servidor mysql sin el cifrado caching_sha2_password, tenemos que buscar la forma de publicar, enviar u obtener información segura a través de la red. Como puede ver en el código a continuación, no uso la variable $ db_name, y estoy usando un usuario en el servidor mysql con una contraseña de configuración estándar. Simplemente cree una contraseña de usuario estándar y configure todos los privilegios. funciona, pero como dije sin seguridad.
<?php $db_name="db"; $mysql_username="root"; $mysql_password="****"; $server_name="localhost"; $conn=mysqli_connect($server_name,$mysql_username,$mysql_password); if ($conn) { echo "connetion success"; } else{ echo mysqli_error($conn); } ?>
fuente