解决DVWA数据库认证失败:caching_sha2_password兼容方案全解析

解决DVWA数据库认证失败:caching_sha2_password兼容方案全解析

【免费下载链接】DVWA 【免费下载链接】DVWA 项目地址: https://gitcode.com/gh_mirrors/dvwa/DVWA

你是否在部署DVWA时遇到过"Database Error #2054: The server requested authentication method unknown to the client"错误?当MySQL 8.0+默认启用caching_sha2_password认证插件时,这个问题尤为常见。本文将通过三种方案彻底解决该兼容性问题,让你的DVWA环境在10分钟内恢复正常。

问题根源分析

MySQL 8.0引入的caching_sha2_password认证机制虽提升了安全性,但与DVWA默认使用的PHP mysqli扩展存在兼容性冲突。从config/config.inc.php.dist配置文件可以看到,DVWA采用标准MySQL连接方式:

$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_user' ]     = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';

而DVWA的数据库连接核心代码dvwa/includes/DBMS/MySQL.php中,并未针对新型认证方式做特殊处理:

@($GLOBALS["___mysqli_ston"] = mysqli_connect( 
  $_DVWA[ 'db_server' ],  
  $_DVWA[ 'db_user' ],  
  $_DVWA[ 'db_password' ], 
  "", 
  $_DVWA[ 'db_port' ]
))

当MySQL服务端要求caching_sha2_password认证,而PHP客户端不支持时,就会出现经典的认证失败错误。

认证错误示例

方案一:修改MySQL用户认证插件

这是最直接有效的解决方案,通过将DVWA数据库用户的认证方式切换为传统的mysql_native_password:

  1. 登录MySQL控制台:
mysql -u root -p
  1. 执行以下SQL命令修改用户认证插件:
ALTER USER 'dvwa'@'localhost' 
IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
FLUSH PRIVILEGES;
  1. 验证修改结果:
SELECT user,plugin FROM mysql.user WHERE user='dvwa';

确保输出结果中plugin字段显示为mysql_native_password。此方法无需修改DVWA代码,完美兼容所有PHP版本。

方案二:配置MySQL服务端兼容模式

如果需要保留MySQL 8.0的安全特性,可通过修改配置文件启用混合认证模式:

  1. 编辑MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
default-authentication-plugin=mysql_native_password
  1. 重启MySQL服务:
sudo service mysql restart
  1. 重新创建DVWA数据库用户(参考README.zh.md中的数据库配置章节):
CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost';

此方案适合需要在同一服务器上运行多个应用的场景,但会降低新安全特性的保护力度。

方案三:升级PHP及数据库驱动

对于追求最新技术栈的用户,可通过升级组件解决兼容性问题:

  1. 确保PHP版本≥7.4,并安装最新mysqli驱动:
sudo apt install php7.4-mysqli
  1. 验证PHP mysqli扩展版本:
php -m | grep mysqli
  1. 修改DVWA配置文件config/config.inc.php,添加MySQLi选项:
// 在数据库配置后添加
mysqli_options($GLOBALS["___mysqli_ston"], MYSQLI_INIT_COMMAND, 
  "SET sql_mode=''");

此方案需要较高的系统维护能力,但能充分利用MySQL 8.0的安全增强特性。

验证与测试

完成配置后,通过DVWA的安装页面验证数据库连接状态:

  1. 访问Setup页面:http://localhost/dvwa/setup.php
  2. 点击"Create / Reset Database"按钮
  3. 如看到"Setup successful!"提示,则表示数据库连接正常

安装成功页面

常见问题排查

若仍遇到问题,可参考以下排查步骤:

  1. 检查MySQL服务状态:
sudo service mysql status
  1. 验证数据库连接参数(确保与config/config.inc.php一致):
mysql -u dvwa -pp@ssw0rd -h 127.0.0.1 -P 3306
  1. 查看Apache错误日志:
tail -f /var/log/apache2/error.log

更多排错技巧可参考README.zh.md中的"常见问题"章节,其中详细列出了"Access denied"、"Unknown authentication method"等错误的解决方法。

通过本文介绍的三种方案,你可以根据实际环境选择最适合的解决路径。无论采用哪种方法,核心都是解决MySQL 8.0新认证机制与DVWA默认配置之间的兼容性问题。完成配置后,即可顺利使用DVWA进行Web安全测试练习。

【免费下载链接】DVWA 【免费下载链接】DVWA 项目地址: https://gitcode.com/gh_mirrors/dvwa/DVWA

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值