UPDATE
Newer versions of phpMyAdmin solved this issue. I've successfully tested with phpMyAdmin 5.0.1
I have installed the MySQL 8.0 server and phpMyAdmin, but when I try to access it from the browser the following errors occur:
#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
I imagine it must have something to do with the strong passwords implemented and the relative freshness of the MySQL release.
But I know nothing of the most advanced driver and connection configuration.
Has someone faced the same problem and solved it? :D
This question is related to
mysql
phpmyadmin
database-connection
mysql-8.0
New MySQL 8.0.11 is using caching_sha2_password
as default authentication method. I think that phpMyAdmin cannot understand this authentication method.
You need to create user with one of the older authentication method, e.g. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'
.
More here https://dev.mysql.com/doc/refman/8.0/en/create-user.html and here https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html
in my case, to fix it I preferred to create a new user to use with PhpMyAdmin because modifying the root user has caused native login problems with other applications such as MySQL WorkBench.
This is what I did:
mysql -u root -p
, enter your password.CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
newMysqlUsername
has no permissions to do anything with the databases. So is needed to provide the user with access to the information they will need.GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
FLUSH PRIVILEGES;
Log out by typing quit
or \q
, and your changes will now be in effect, we can log in into PhpMyAdmin with the new user and it will have access to the databases.
Also you can log back in with this command in terminal:
mysql -u newMySqlUsername -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
Login through the command line, it will work after that.
If you are using the official mysql docker container, there is a simple solution:
Add the following line to your docker-compose service:
command: --default-authentication-plugin=mysql_native_password
Example configuration:
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
I solved my problem basically with András answer:
1- Log in to MySQL console with root user:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
And type the root's password to auth.
2- I created a new user:
mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';
3- Grant all privileges to the new user:
mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';
4- Change the Authentication Plugin with the password:
mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Now, phpmyadmin works fine logging the new user.
I solved this issue by doing following:
Enter to system preferences -> mysql
Select "Initialize database" and enter a new root password selecting "Use Legacy Password Encryption".
Login into phpmyadmin with the new password.
I solved this issue by doing the following:
default_authentication_plugin = mysql_native_password
to theCREATE USER
'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO
'root'@'localhost';
and then FLUSH PRIVILEGES;
As many pointed out in other answers, changing the default authentication plugin of MySQL to native does the trick.
Still, since I can't use the new caching_sha2_password plugin, I'll wait until compatibility is developed to close the topic.
I had this problem, did not find any ini file in Windows, but the solution that worked for me was very simple.
1. Open the mysql installer.
2. Reconfigure mysql server, it is the first link.
3. Go to authentication method.
4. Choose 'Legacy authentication'.
5. Give your password(next field).
6. Apply changes.
That's it, hope my solution works fine for you as well!
I used ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
it worked
I went to system
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password
as my config.inc.php
file, restarted the apache server and it worked. I was still suspicious about it so I stopped the apache and mysql server and started them again and now it's working.
Create another user with mysql_native_password
option:
In terminal:
mysql> CREATE USER 'su'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'su'@'localhost';
mysql> FLUSH PRIVILEGES;
To fix this issue I just run one query in my mysql
console.
For this login to mysql console using this
mysql -u {username} -p{password}
After this I just run one query as given below:-
ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';
when I run this query I got message that query executed. Then login to PHPMYADMIN with username/password.
You can change the Authentication if u are running on Windows by reconfiguring the installation by running the msi. It will ask for changing the default authentication to legacy, then u can proceed with that option to change the authentication to the legacy one.
As @kgr mentioned, MySQL 8.0.11 made some changes to the authentication method.
I've opened a phpMyAdmin bug report about this: https://github.com/phpmyadmin/phpmyadmin/issues/14220.
MySQL 8.0.4-rc was working fine for me, and I kind of think it's ridiculous for MySQL to make such a change in a patch level release.
I solved this with MySQL 8.0.12 by running:
mysql_upgrade -u root
Another idea: as long as the phpmyadmin and other php tools don't work with it, just add this line to your file /etc/mysql/my.cnf
default_authentication_plugin = mysql_native_password
See also: Mysql Ref
I know that this is a security issue, but what to do if the tools don't work with caching_sha2_password?
Source: Stackoverflow.com