【问题标题】:Problem using Perl to connect to MySQL database on remote server使用 Perl 连接到远程服务器上的 MySQL 数据库的问题
【发布时间】:2010-07-20 16:15:38
【问题描述】:

我有一个 Perl 脚本,它从一台服务器(我们称之为 server1)上的 MySQL 数据库获取数据,处理它并将其写入另一台服务器(server2)上的另一个数据库。两台服务器都与运行 Perl 脚本的服务器远程。

我可以连接到 server1 上的数据库 OK,但是当我尝试使用相同的 DBI 方法连接到 server2 上的数据库时,出现错误。这里,作为命令行 Perl,是导致错误的位:

perl -MDBI -e 'DBI->connect("DBI:mysql:myDB:server2.whatever.co.uk","myuser","mypassword") or die DBI->errstr;'

这是错误消息:

DBI connect('myDB:server2.whatever.co.uk','myuser',...) failed: Client does not support authentication protocol requested by server; consider upgrading MySQL client at -e line 1 Client does not support authentication protocol requested by server; consider upgrading MySQL client at -e line 1.

我没有 root 访问权限,因此无法升级 MySQL,也无法更改密码以使用旧密码哈希算法,这是很多地方建议的解决方案。

有什么想法吗?

【问题讨论】:

  • 除了编写您自己的低级套接字 mysql 客户端(我不推荐)之外,给您的 2 个选项是 AFAIK 唯一的选项。
  • 是的,这就是我所担心的。只是希望有人知道不同。

标签: mysql perl dbi


【解决方案1】:

作为安全措施,可以将数据库设置为仅接受来自特定地址集的连接。因此,如果您尝试从家用笔记本电脑(例如)访问产品数据库,即使您拥有正确的凭据,它也可能会拒绝您。尝试从已知可以使用其他技术的地方访问它——例如,如果您有一个已经可以访问它的网站,请转到运行 apache/tomcat 的任何地方,然后尝试那里的 perl。如果它有效,那就是问题所在。您还可以主动检查数据库设置。

【讨论】:

  • 谢谢。与另一台服务器的连接工作正常,所以这台服务器有些东西(我称之为 myScriptHostServer)。但是由于各种原因,我必须从那里运行 Perl 脚本。有一个 myuser@myScriptHostServer 用户设置了数据库的所有权限,所以这绝对是身份验证问题而不是权限问题。
  • hmm,你知道mysql端的认证有什么区别吗,即使不能改?我不得不想象有一个特定的 dbi 模块来处理特殊的身份验证情况,比如 ssl 或者更有趣的东西......
【解决方案2】:

好的,在没有替代方案的情况下,我找了一个对 server2 具有 root 访问权限的人来执行在其他地方发布的修复:

以 MySQL root 用户身份连接到 MySQL,然后:

mysql> use mysql;
mysql> SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('password');
mysql> FLUSH PRIVILEGES;

用适当的值替换“用户名”、“主机名”和“密码”。

所以我在这里要说的是,如果您没有 root 访问权限来升级 MySQL 或更改密码以使用旧密码哈希算法,那么唯一的解决方案就是找到一个 谁可以为你做出改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多