当前位置: 首页 > 面试题库 >

PHP 5.4 PDO无法使用旧的不安全身份验证连接到MySQL 4.1+

卫华奥
2023-03-14
问题内容

我知道有很多类似的问题,实际上我已经阅读了全部(9)。

但是,它们都不能解决我的问题。

我有一个共享主机包(最低要求)。我的软件包中包括域名,以及托管MySQL服务器的单独IP地址。对于开发,我使用http://localhost/PHP
5.4的开发服务器,并使用托管包中提供的MySQL服务器。

该问题仅在我的PC上出现,因为我已经安装了PHP 5.4,但是我的Web主机已经安装了PHP 5.2.17,并且不会升级。MySQL服务器在MySQL
5.1.50上。

幸运的是,phpMyAdmin具有内置的“更改密码”功能。

phpMyAdmin中有两个用于更改密码的哈希选项:

  • MySQL 4.1以上
  • 兼容MySQL 4.0

我使用MySQL 4.1+选项更改了密码,并确认更新成功。

配置文件已更新。 SET PASSWORD = PASSWORD( '***' )

但是,当我执行此查询时:

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

它告诉我密码长度仍为16。输出:

1     1     16

因此问题仍然存在。

无法连接到数据库。SQLSTATE [HY000] [2000] mysqlnd无法使用旧的不安全身份验证连接到MySQL
4.1+。请使用管理工具通过命令SET PASSWORD =
PASSWORD(’your_existing_password’)重置密码。这将在mysql.user中存储一个新的,更安全的哈希值。如果此用户在PHP
5.2或更早版本执行的其他脚本中使用,则可能需要从my.cnf文件中删除old-passwords标志。

使用phpMyAdmin中的DBO用户登录时,我也尝试过执行以下查询:

SET SESSION old_passwords=0; 
[phpMyAdmin reloads to the home screen, but the value remains = 1]

SET GLOBAL old_passwords = 0;
#1227 - Access denied; you need the SUPER privilege for this operation

FLUSH PRIVILEGES;
#1227 - Access denied; you need the RELOAD privilege for this operation

这与在Webhost的菜单中设置DBO用户的说明相矛盾:

数据库所有者
创建新数据库时,需要指定数据库所有者(DBO)用户,该用户将具有
对数据库的完全管理员访问权限。

这是我必须处理的Web主机吗?还是可以由我的DBO用户解决?否则可以绕过PHP吗?(因为它适用于PHP 5.2.17,但不适用于PHP 5.4)


问题答案:

虽然SET SESSION old_passwords=0;在phpMyAdmin中不起作用。

我下载了MySQL GUI工具,并使用MySQL查询浏览器在非DBO用户上执行了相同的命令:

SET SESSION old_passwords = 0;

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

现在返回:

1      0      41

所以我只是更改了密码:

SET PASSWORD = PASSWORD('my_old_password')

现在,PHP 5.4 PDO通过该用户连接到数据库!



 类似资料:
  • 问题内容: 我收到以下错误: 数据库连接失败:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+。请使用管理工具通过命令重置密码。 这将在中存储一个新的,更安全的哈希值。如果此用户在PHP 5.2或更早版本执行的其他脚本中使用,则可能需要从文件中删除old-passwords标志 我在本地计算机上使用PHP 5.3.8和MySQL 5.5.16,并且我的主机(媒体寺庙)正在运行PH

  • 问题内容: 我试图连接到http://bluesql.net上的mySQL数据库,但是当我尝试连接时,出现此错误: 我已经研究过了,它与MySQL 4.1之前使用的一些旧密码方案有关。较新的版本可以选择使用旧密码,我已阅读过此密码可能会导致此问题。 我正在运行php 5.3,并与mySQLi(新的mysqli(…))连接。我希望我可以在代码中做一些事情以连接到bluesql.net上的数据库- 显

  • 我在将Spring应用程序与连接并始终获得异常时遇到了问题。我能够写入数据库并从数据库中获取信息,但是,一旦我实现了一种针对它进行身份验证的方法,我似乎遇到了问题。 我已经阅读了几个不同的来源,但未能使其正常工作。我能够通过。 下面是我的代码: 我的数据源在这里定义为: 我使用创建了“/成员/添加”路径,以便我可以在尝试进行身份验证之前注册用户。但是,我得到了以下堆栈跟踪的异常: 调用堆栈: 在经

  • 我在Ubuntu上安装了自己的Jitsi实例,遵循使用官方软件包的文档。这很有魅力。但我不想有一个完全开放的实例,所以我遵循了https://github.com/jitsi/jicofo#secure-域需要登录才能创建会议。 据我所知,我完全遵循了文档,但在重新启动Jitsi后,我无法再创建会议。我看到以下行为: 私人网址:我得到一个消息,会议还没有开始,还有一个“我是主持人”按钮。如果我按下

  • 在使用spring 4.1.6、spring security 4.0.1、,和JavaConfig,我们正在尝试实现LDAP身份验证,但不是在configure(AuthenticationManagerBuilder auth)方法中定义LDAP服务器的属性(url等),而是希望从已在容器上配置并具有所有所需属性的JBOSS安全域中获取属性。 我们尝试了几件事,并在网上搜索了实现这一点的方法,

  • 我正在尝试配置laravel的auth以适合我的db。但无论我做什么,都会覆盖像或在LoginController中,它忽略所有内容。有人知道如何用不同的数据库参数化laravel的身份吗? 以下是我在LoginController中更改的内容: 在用户模型中: 编辑:config/auth.php: ]; LoginController: 名称空间App\Http\Controllers\Aut