【问题标题】:MySQL password rejected after EasyPHP upgradeEasyPHP 升级后 MySQL 密码被拒绝
【发布时间】:2014-09-29 09:46:00
【问题描述】:

我有一个网站已经启动并运行了很多年(到现在差不多 10 年),并且由提供 MySQL 数据库(以及我无法更改的连接 ID 和密码)的第三方托管。

为了管理更改,我使用了旧版本的 EasyPHP (Apache 1.3.27 - MySQL 4.0.15 - PHP 4.3.3),配置为与在线服务器版本完全匹配。

在开发环境中,MySQL用户设置为托管公司提供的User = ID,托管公司提供的Host = %, Password = pwdALL PRIVILEGES and Grant = Yes

不出所料,经过这么多年,托管公司宣布迁移到更新版本的 PHP 和 MySQL,为了能够做好准备,我安装了最新版本的 EasyPHP (Apache 2.4.7 - MySQL 5.6.15 - PHP 5.4.24)

在这个新版本中,我使用 PhpMyAdmin 创建了 MySQL 用户(与上面相同的设置,没有错误),并设置了与以前相同的 VirtualHosts,但是我的脚本都无法连接到数据库,返回经典错误:

Warning: mysql_connect(): Access denied for user: 'username'@'localhost' (Using password: YES)
  • 注意:在mysql_connect() 函数中,使用了正确的主机名,而不是消息错误中提到的'localhost'

其他 PHP 代码可以正确执行,但在没有数据库连接的情况下不是很有用。 我试图删除密码,并且可以连接。同样使用root@localhost and no password,建立连接。 但这些都不是“真实”事物的选项,所以我真的应该能够使用完整的连接参数来模拟在线服务器的设置。

为了完整起见,我还安装并设置了 UwAmp (Apache 2.2.22 - MySQL 5.6.11 - PHP 5.3.25),结果相同。

也不涉及 Windows 操作系统(和/或“主机”文件),因为旧版本的 EasyPHP 在同一个机器上可以正常运行。

最后,我通过 PhpMyAdmin 删除了用户,并尝试通过 PHP mysql_query 重新创建:

CREATE USER 'userID'@'hostname' IDENTIFIED BY PASSWORD 'password';

这是抛出错误:

(1827) The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.

编辑: 错误查询,用户在跳过查询中的PASSWORD 字符串时创建。唉,这个用户仍然无法连接到数据库。为什么?

我也玩过"SET old_passwords=0""....=1",总是报同样的错误。

是否有人对导致错误的开发服务器设置有任何想法,以便使其正常工作?

【问题讨论】:

  • 在 4.1 版 MySQL 更改了密码哈希方法。您应该阅读以下内容:dev.mysql.com/doc/refman/5.6/en/password-hashing.html
  • 我的猜测是您的数据库中的密码列太短,因此出现了意外的格式。
  • @GeraldSchneider 我明白了,但是 MySQL 在从连接请求中接收密码时使用相同的哈希方法,不是吗?当我检查 (export) 用户时,密码是 41 位数字。 create user有错别字,可以重新创建用户,但连接仍然被拒绝。

标签: php mysql database phpmyadmin


【解决方案1】:

此处不应使用PASSWORD 子句:

CREATE USER 'userID'@'hostname' IDENTIFIED BY 'password';

查看Manual

【讨论】:

  • 你说得对,小错字。现在可以再次创建用户。唉,同样的第一个错误......
猜你喜欢
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2018-03-15
  • 2018-10-14
相关资源
最近更新 更多