MySQL 8.0 上的 phpMyAdmin
phpMyAdmin on MySQL 8.0
更新
较新版本的 phpMyAdmin 解决了这个问题。我已经成功测试了 phpMyAdmin 5.0.1
我已经安装了 MySQL 8.0 服务器和 phpMyAdmin,但是当我尝试从浏览器访问它时出现以下错误:
#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
我想这一定与实施的强密码和 MySQL 版本的相对新鲜度有关。
但我对最高级的驱动和连接配置一无所知
有人遇到同样的问题并解决了吗? :D
新 MySQL 8.0.11 使用 caching_sha2_password
作为默认身份验证方法。我认为 phpMyAdmin 无法理解这种身份验证方法。
您需要使用一种较旧的身份验证方法创建用户,例如CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'
.
这里有更多内容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
另一个想法:只要 phpmyadmin 和其他 php 工具无法使用它,只需将此行添加到您的文件 /etc/mysql/my.cnf
default_authentication_plugin = mysql_native_password
另请参阅:
Mysql Ref
我知道这是一个安全问题,但如果这些工具无法与 caching_sha2_password 一起使用怎么办?
如@kgr 所述,MySQL 8.0.11 对身份验证方法进行了一些更改。
我已经打开了一个关于此的 phpMyAdmin 错误报告:https://github.com/phpmyadmin/phpmyadmin/issues/14220。
MySQL 8.0.4-rc 对我来说工作得很好,我觉得 MySQL 在补丁级别发布中做出这样的改变是荒谬的。
我通过执行以下操作解决了这个问题:
- 将
default_authentication_plugin = mysql_native_password
添加到
mysqld] my.cnf 部分
- 输入 mysql 并通过执行
CREATE USER
'root'@'localhost' IDENTIFIED BY 'password';
之类的操作来创建新用户
- 根据需要授予权限。例如。
GRANT ALL PRIVILEGES ON * . * TO
'root'@'localhost';
然后 FLUSH PRIVILEGES;
- 使用新用户登录 phpmyadmin
我通过执行以下操作解决了这个问题:
进入系统偏好设置 -> mysql
Select "Initialize database" 并输入新的 root 密码选择 "Use Legacy Password Encryption"。
使用新密码登录 phpmyadmin。
使用 root 用户登录 MySQL 控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
并使用那里的密码更改身份验证插件:
mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Query OK, 0 rows affected (0.08 sec)
您可以在 MySQL 8.0 参考手册
上阅读有关首选身份验证插件的更多信息
它在 docker 化环境中完美运行:
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
现在您可以使用 root / PASSWORD 在 http://localhost:8080 上登录 phpMyAdmin
mysql/mysql-server
如果您正在使用 mysql/mysql-server docker 图片
但是请记住,这只是开发环境中的一个'quick and dirty'解决方案。改变 MySQL Preferred Authentication Plugin.
是不明智的
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
已于 2018 年 10 月 4 日更新解决方案
通过取消注释 /etc/my.cnf
中的 default_authentication_plugin=mysql_native_password
设置来更改 MySQL 默认身份验证插件
使用风险自负
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
2019 年 1 月 30 日更新了解决方法
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 exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest
2021 年 9 月 13 日更新解决方案
更改用户 'root'@'localhost' 通过 'password';
识别 mysql_native_password
- 完全带引号 *
正如许多人在其他答案中指出的那样,changing the default authentication plugin of MySQL to native 可以解决问题。
不过,新的caching_sha2_password插件我用不了,等兼容性开发完了再说吧
我去了系统
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password
作为我的 config.inc.php
文件,重新启动了 apache 服务器,它工作了。我仍然对此持怀疑态度,所以我停止了 apache 和 mysql 服务器并再次启动它们,现在它正在运行。
我用 MySQL 8.0.12 解决了这个问题 运行:
mysql_upgrade -u root
如果你使用的是官方mysqldocker容器,有一个简单的解决方法:
将以下行添加到您的 docker-compose 服务:
command: --default-authentication-plugin=mysql_native_password
示例配置:
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
为了解决这个问题,我 运行 在我的 mysql
控制台中进行了一次查询。
为此使用此
登录mysql控制台
mysql -u {username} -p{password}
在此之后,我只是 运行 一个查询,如下所示:-
ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';
当我 运行 这个查询时,我收到了查询已执行的消息。然后使用 username/password.
登录 PHPMYADMIN
我基本上用 András 的回答解决了我的问题:
1- 使用 root 用户登录 MySQL 控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
然后输入 root 的密码进行身份验证。
2- 我创建了一个新用户:
mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';
3- 授予新用户所有权限:
mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';
4- 使用密码更改身份验证插件:
mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
现在,phpmyadmin 可以很好地记录新用户。
我遇到了这个问题,在 Windows 中没有找到任何 ini 文件,但对我有用的解决方案非常简单。
1. 打开 mysql 安装程序。
2.重新配置mysql服务器,是第一个link.
3. 转到身份验证方法。
4. 选择'Legacy authentication'.
5. 输入您的密码(下一个字段)。
6. 应用更改。
就是这样,希望我的解决方案也适合您!
在我的例子中,为了修复它,我更喜欢创建一个新用户来使用 PhpMyAdmin,因为修改 root 用户会导致其他应用程序(例如 MySQL WorkBench.
这是我做的:
- 使用 root 用户登录 MySQL 控制台:
mysql -u root -p
,输入您的密码。
- 让我们在 MySQL shell 中创建一个新用户:
CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
- 此时
newMysqlUsername
无权对数据库执行任何操作。因此需要为用户提供他们所需信息的访问权限。
GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
- 完成为新用户设置的权限后,务必重新加载所有权限。
FLUSH PRIVILEGES;
通过键入 quit
或 \q
注销,您的更改现在将生效,我们可以使用新用户登录 PhpMyAdmin,它将具有访问权限到数据库。
您也可以在终端中使用此命令重新登录:
mysql -u newMySqlUsername -p
我用过ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
它有效
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
通过命令行登录,之后就可以了
如果您在 Windows 上 运行,您可以通过 运行 msi 重新配置安装来更改身份验证。它会要求将默认身份验证更改为旧版,然后您可以继续该选项以将身份验证更改为旧版。
使用 mysql_native_password
选项创建另一个用户:
在终端中:
mysql> CREATE USER 'su'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'su'@'localhost';
mysql> FLUSH PRIVILEGES;
更新
较新版本的 phpMyAdmin 解决了这个问题。我已经成功测试了 phpMyAdmin 5.0.1
我已经安装了 MySQL 8.0 服务器和 phpMyAdmin,但是当我尝试从浏览器访问它时出现以下错误:
#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
我想这一定与实施的强密码和 MySQL 版本的相对新鲜度有关。
但我对最高级的驱动和连接配置一无所知
有人遇到同样的问题并解决了吗? :D
新 MySQL 8.0.11 使用 caching_sha2_password
作为默认身份验证方法。我认为 phpMyAdmin 无法理解这种身份验证方法。
您需要使用一种较旧的身份验证方法创建用户,例如CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'
.
这里有更多内容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
另一个想法:只要 phpmyadmin 和其他 php 工具无法使用它,只需将此行添加到您的文件 /etc/mysql/my.cnf
default_authentication_plugin = mysql_native_password
另请参阅: Mysql Ref
我知道这是一个安全问题,但如果这些工具无法与 caching_sha2_password 一起使用怎么办?
如@kgr 所述,MySQL 8.0.11 对身份验证方法进行了一些更改。
我已经打开了一个关于此的 phpMyAdmin 错误报告:https://github.com/phpmyadmin/phpmyadmin/issues/14220。
MySQL 8.0.4-rc 对我来说工作得很好,我觉得 MySQL 在补丁级别发布中做出这样的改变是荒谬的。
我通过执行以下操作解决了这个问题:
- 将
default_authentication_plugin = mysql_native_password
添加到
mysqld] my.cnf 部分
- 输入 mysql 并通过执行
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
之类的操作来创建新用户
- 根据需要授予权限。例如。
GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost';
然后FLUSH PRIVILEGES;
- 使用新用户登录 phpmyadmin
我通过执行以下操作解决了这个问题:
进入系统偏好设置 -> mysql
Select "Initialize database" 并输入新的 root 密码选择 "Use Legacy Password Encryption"。
使用新密码登录 phpmyadmin。
使用 root 用户登录 MySQL 控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
并使用那里的密码更改身份验证插件:
mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Query OK, 0 rows affected (0.08 sec)
您可以在 MySQL 8.0 参考手册
上阅读有关首选身份验证插件的更多信息它在 docker 化环境中完美运行:
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
现在您可以使用 root / PASSWORD 在 http://localhost:8080 上登录 phpMyAdmin
mysql/mysql-server
如果您正在使用 mysql/mysql-server docker 图片
但是请记住,这只是开发环境中的一个'quick and dirty'解决方案。改变 MySQL Preferred Authentication Plugin.
是不明智的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
已于 2018 年 10 月 4 日更新解决方案
通过取消注释 /etc/my.cnf
default_authentication_plugin=mysql_native_password
设置来更改 MySQL 默认身份验证插件
使用风险自负
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
2019 年 1 月 30 日更新了解决方法
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 exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest
2021 年 9 月 13 日更新解决方案
更改用户 'root'@'localhost' 通过 'password';
识别 mysql_native_password- 完全带引号 *
正如许多人在其他答案中指出的那样,changing the default authentication plugin of MySQL to native 可以解决问题。
不过,新的caching_sha2_password插件我用不了,等兼容性开发完了再说吧
我去了系统
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password
作为我的 config.inc.php
文件,重新启动了 apache 服务器,它工作了。我仍然对此持怀疑态度,所以我停止了 apache 和 mysql 服务器并再次启动它们,现在它正在运行。
我用 MySQL 8.0.12 解决了这个问题 运行:
mysql_upgrade -u root
如果你使用的是官方mysqldocker容器,有一个简单的解决方法:
将以下行添加到您的 docker-compose 服务:
command: --default-authentication-plugin=mysql_native_password
示例配置:
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
为了解决这个问题,我 运行 在我的 mysql
控制台中进行了一次查询。
为此使用此
登录mysql控制台mysql -u {username} -p{password}
在此之后,我只是 运行 一个查询,如下所示:-
ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';
当我 运行 这个查询时,我收到了查询已执行的消息。然后使用 username/password.
登录 PHPMYADMIN我基本上用 András 的回答解决了我的问题:
1- 使用 root 用户登录 MySQL 控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
然后输入 root 的密码进行身份验证。
2- 我创建了一个新用户:
mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';
3- 授予新用户所有权限:
mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';
4- 使用密码更改身份验证插件:
mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
现在,phpmyadmin 可以很好地记录新用户。
我遇到了这个问题,在 Windows 中没有找到任何 ini 文件,但对我有用的解决方案非常简单。
1. 打开 mysql 安装程序。
2.重新配置mysql服务器,是第一个link.
3. 转到身份验证方法。
4. 选择'Legacy authentication'.
5. 输入您的密码(下一个字段)。
6. 应用更改。
就是这样,希望我的解决方案也适合您!
在我的例子中,为了修复它,我更喜欢创建一个新用户来使用 PhpMyAdmin,因为修改 root 用户会导致其他应用程序(例如 MySQL WorkBench.
这是我做的:
- 使用 root 用户登录 MySQL 控制台:
mysql -u root -p
,输入您的密码。 - 让我们在 MySQL shell 中创建一个新用户:
CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
- 此时
newMysqlUsername
无权对数据库执行任何操作。因此需要为用户提供他们所需信息的访问权限。
GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
- 完成为新用户设置的权限后,务必重新加载所有权限。
FLUSH PRIVILEGES;
通过键入
quit
或\q
注销,您的更改现在将生效,我们可以使用新用户登录 PhpMyAdmin,它将具有访问权限到数据库。您也可以在终端中使用此命令重新登录:
mysql -u newMySqlUsername -p
我用过ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
它有效
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
通过命令行登录,之后就可以了
如果您在 Windows 上 运行,您可以通过 运行 msi 重新配置安装来更改身份验证。它会要求将默认身份验证更改为旧版,然后您可以继续该选项以将身份验证更改为旧版。
使用 mysql_native_password
选项创建另一个用户:
在终端中:
mysql> CREATE USER 'su'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'su'@'localhost';
mysql> FLUSH PRIVILEGES;