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

MySQL远程连接因“身份验证方法未知”而失败

高慈
2023-03-14
问题内容

我正在尝试从本地计算机在线远程连接到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

我的本地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();
}

问题答案:

我克服了挑战。我发现我的远程MySQL数据库主机仍使用旧的MySQL密码哈希(16字节),而我的本地主机数据库服务器使用41字节的密码哈希。我使用以下查询来查找密码长度:

SELECT PASSWORD('mypass')

我通过运行以下查询将localhost数据库服务器密码哈希更改为16字节

SET GLOBAL old_passwords = 1;

然后,我编辑了my.ini文件,并设置,old_password=1以确保服务器重新启动时不会恢复为新的密码系统。但这并不能解决我的问题。

我发现使用PHP的是由PHP处理的身份验证,因为我使用PHPMySQL API,所以我降级了,PHP 5.2.8并且能够成功建立远程连接。

我希望这可以帮助别人。



 类似资料:
  • 我收到一个错误“无法建立SSL连接,请参阅内部异常。身份验证失败,请参阅内部异常。”当尝试通过C#HttpWebRequest通过SSL发布请求时(已尝试RestSharp和HttpClient,结果相同)。我还尝试了网络上提到的所有可能的解决方案,如: 他们都不为我工作。另一个问题是,我在另一台计算机上运行相同的项目,它的工作没有任何问题。所以看起来问题的来源是环境,也许. net框架或注册表中

  • 我一直在尝试使用SASL_PLAINTEXTSCRAM-SHA-256向我的Kafka代理添加SASL身份验证,但没有任何成功。我在Kafka的日志文件中不断收到以下错误。 错误[控制器id=0,targetBrokerId=0]连接到节点0的身份验证失败,原因是:由于SASL机制SCRAM-SHA-256(org.apache.kafka.clients.NetworkClient)的凭据无效,

  • 我使用LinkedIn Api使用Oauth2和Web请求,但今天我发现它停止工作,我得到错误身份验证失败,因为远程方已经关闭了传输流,这里是我使用的URL AUTHORIZE =“https://www.linkedin.com/uas/oauth2/authorization”;ACCESS_TOKEN = “https://www.linkedin.com/uas/oauth2/access

  • 我有麻烦让我的数据库连接到WAMP。我做这件事已经有5年了,所以我有点生疏了。我将我的Mysql升级到8.0时遇到了这个错误 我刷新了我的特权,并将插件更改为本机的根。在这一点上我被难倒了。有人能帮帮我吗? 下面是我的数据库类,直到第37行 /** > class Database*/class Database{ 专用$IP、$username、$password、$database; /**

  • 我正在将Monolith Java/Spring服务器重写为MicroService,同时向客户机公开相同的API接口,这样他们就不会注意到任何更改。 在Monolith服务器中,我们使用和。 第一部分是创建一个基于Java的API-Gateway,它将处理所有身份验证/授权作为通往Monolith服务器的隧道。 创建新的微服务(使用spring Initializer)后,我尝试将spring