Estou usando php mysqli_connect
para fazer login em um banco de dados MySQL (tudo em 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');
}
?>
Arquivo ini do 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
com caching_sha2_password
o arquivo ini do MySQL Server, não é possível fazer o login com o usuário1 ou usuário2;
erro: mysqli_connect (): O servidor solicitou método de autenticação desconhecido para o cliente [caching_sha2_password] em ...
com mysql_native_password
no arquivo ini do MySQL Server, é possível fazer o login com user1, mas com user2, mesmo erro;
como posso fazer o login usando caching_sha2_password
no servidor mySql?
mysqli
.Respostas:
A partir do PHP 7.4, isso não é mais um problema. Suporte para
caching_sha2
método de autenticação foi adicionado ao mysqlnd.Atualmente, a extensão PHP mysqli não suporta o novo recurso de autenticação caching_sha2. Você tem que esperar até que eles lançem uma atualização.
Verifique a postagem relacionada de desenvolvedores MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Eles não mencionaram o PDO, talvez você deva tentar se conectar com o PDO.
fonte
mysql_native_password
conforme sugerido por algumas respostas.Eu resolvo isso pelo comando SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
que é referenciado por https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
se você estiver criando um novo usuário
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
que é referenciado por https://dev.mysql.com/doc/refman/8.0/en/create-user.html
isso funciona para mim
fonte
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Remova as aspas (') após
ALTER USER
e mantenha aspas (') apósmysql_native_password BY
Está funcionando para mim também.
fonte
Se você estiver no Windows e não for possível usá
caching_sha2_password
-lo, faça o seguinte:O instalador fará todas as alterações de configuração necessárias para você.
fonte
Está funcionando para mim (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64bits)
Edite o arquivo
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Redefina o serviço MySQL no Windows e no MySQL Shell ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
fonte
Como muitas pessoas, tive o mesmo problema. Embora o usuário esteja configurado para usar mysql_native_password, e eu possa conectar a partir da linha de comando, a única maneira de fazer com que mysqli () se conecte é adicionando
para a seção [mysqld] de, em minha configuração no ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
fonte
Executei o seguinte comando
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
na linha de comando e finalmente reiniciei o MySQL nos serviços locais.fonte
'root' @ 'localhost'
deve ser lido em vez dissoALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Agora você pode atualizar para o PHP7.4 e o MySQL irá acompanhá-lo
caching_sha2_password
por padrão, então a instalação padrão do MySQL funcionará commysqli_connect
Nenhuma configuração necessária.fonte
Se você estiver em um Mac, veja como consertar. Isso depois de toneladas de tentativa e erro. Espero que isso ajude outras pessoas ..
Depurando:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Resolução: nano /usr/local/etc/my.cnf
Adicione: 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 execute: brew services restart mysql
fonte
Eu tentei isso no Ubuntu 18.04 e é a única solução que funcionou para mim:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
fonte
Eu acho que não é útil configurar o servidor mysql sem criptografia caching_sha2_password, temos que encontrar uma maneira de publicar, enviar ou obter informações seguras através da rede. Como você pode ver no código abaixo, eu não uso a variável $ db_name e estou usando um usuário no servidor mysql com senha de configuração padrão. Basta criar uma senha de usuário padrão e configurar todos os privilégios. funciona, mas como disse sem segurança.
<?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); } ?>
fonte