Chi*_*uzo 13 mysql pdo database-connection remote-access
我试图从我的本地机器远程连接MySQL服务器,但我收到以下错误:
Warning: PDO::__construct(): The server requested authentication
method unknown to the client [mysql_old_password] in
C:\xampp\htdocs\ticket\terminal\sync.php
SQLSTATE[HY000] [2054] The server requested authentication method
umknown to the client
Run Code Online (Sandbox Code Playgroud)
我的本地MySQL服务器版本是5.5.27,libmysql - mysqlnd 5.0.10远程MySQL服务器版本是5.5.23,mysqlnd版本没有公开.
我想这是一个不兼容的密码哈希问题,但我不知道如何解决它.以下是我的连接代码的一部分
$dsn = 'mysql:host=184.173.209.193;dbname=my_db_name';
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
try {
$online_dbh = new PDO($dsn, 'myusername', 'mypassword', $options);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Congratulations!";
} catch (PDOException $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*son 13
假设您使用的是PHP 5.3+,您可能会遇到其中一个向后不兼容性更改:
新的mysqlnd库需要使用MySQL 4.1较新的41字节密码格式.继续使用旧的16字节密码将导致mysql_connect()和类似的函数发出错误,"mysqlnd无法使用旧的身份验证连接到MySQL 4.1+."
如果是,请参阅/sf/answers/93837691/以获取有关更新密码的信息.
小智 5
这可能会帮助解决此问题的人。这就是我在我的情况下修复它的方式。来自MySQL PHP API (PDO_MYSQL)网站
当运行 7.1.16 之前的 PHP 版本或 7.2.4 之前的 PHP 7.2 时,将 MySQL 8 Server 的默认密码插件设置为 mysql_native_password 否则您将看到类似于 The server requests authentication method unknown to the client [caching_sha2_password] 的错误,即使在 caching_sha2_password 时未使用。
这是因为 MySQL 8 默认使用 caching_sha2_password,这是旧 PHP (mysqlnd) 版本无法识别的插件。相反,通过在 my.cnf 中设置 default_authentication_plugin=mysql_native_password 来更改它。未来的 PHP 版本将支持 caching_sha2_password 插件。同时,mysql_xdevapi扩展确实支持它。
我克服了挑战。我发现我的远程 MySQL 数据库主机仍然使用旧的 MySQL 密码哈希(16 字节),而我的本地主机数据库服务器使用 41 字节密码哈希。我使用以下查询来查找密码长度:
SELECT PASSWORD('mypass')
Run Code Online (Sandbox Code Playgroud)
我通过运行以下查询将本地主机数据库服务器密码哈希更改为 16 字节
SET GLOBAL old_passwords = 1;
Run Code Online (Sandbox Code Playgroud)
然后我编辑my.ini文件,并设置old_password=1以确保当服务器重新启动时,它不会恢复到新的密码系统。但这并没有解决我的问题。
我发现是 PHP 处理身份验证,因为我使用的是PHP's MySQL API,所以我降级到PHP 5.2.8并且能够成功进行远程连接。
我希望这可以帮助别人。
| 归档时间: |
|
| 查看次数: |
62724 次 |
| 最近记录: |