Perl DBI:SSL上的mysql连接失败

时间:2014-05-09 14:20:02

标签: mysql perl ssl

长时间阅读,但这是我的第一个问题。

我在数据中心有MySQL服务器,在另一个地方处理服务器,因此我需要加密从Perl脚本到数据库的连接。所有必要的设置都是在MySQL上创建的(新用户的创建,ca,服务器和客户端密钥的创建)以及通过SSL的MySQL连接正常工作。

root@server:# mysql -h _HOST_ --port 3306 -u _SSL_USER_ --ssl-cert=/etc/mysql/certs/client-cert.pem --ssl-key=/etc/mysql/certs/client-key.pem -p _DATABASE_
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g. 
Your MySQL connection id is 49694205 
Server version: 5.0.96 Source distribution ...

所以,我相信设置很好。问题是我无法使我的Perl脚本连接到数据库。返回的错误只是:

在temp.pl第7行拒绝用户'_SSL_USER _'@' HOST '(使用密码:YES)。

为简化起见,我在脚本中只放了以下代码:

#!/usr/bin/perl 
use strict; 
use DBI; 

#DBI->trace(5); 
my $dbh = DBI->connect( 
  "DBI:mysql:database=_DATABASE_;host=_HOST_; 
  mysql_ssl=1; 
  mysql_ssl_client_key=/etc/mysql/certs/client-key.pem; 
  mysql_ssl_client_cert=/etc/mysql/certs/client-cert.pem; 
  mysql_ssl_ca_file=/etc/mysql/certs/ca-cert.pem", 
  '_SSL_USER_', 
  '_SSL_USER_PWD_' 
) || die DBI->errstr; 
exit(0);

Perl版本是为i486-linux-thread-multi构建的v5.10.0。 DBD :: mysql模块使用'-ssl'选项编译。

我无法弄清楚或找到进一步调试的方法。任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

您使用的是所有Perl模块的最新版本吗?

我找到了这个帖子:http://forums.mysql.com/read.php?51,78084,78264#msg-78264

  

修正了它。从2.9007升级的DBD-mysql - > 3.0002,它就像一个   魅力。

也许删除用户名/密码会有帮助吗?

my $dbh = DBI->connect( 
  "DBI:mysql:database=_DATABASE_;host=_HOST_; 
  mysql_ssl=1; 
  mysql_ssl_client_key=/etc/mysql/certs/client-key.pem; 
  mysql_ssl_client_cert=/etc/mysql/certs/client-cert.pem; 
  mysql_ssl_ca_file=/etc/mysql/certs/ca-cert.pem", 
  '', 
  '' 
) || die DBI->errstr; 
  

不能说你的问题是什么,但我假设你有   包括DBI->连接线中的用户名和密码   另一件事是cacert和客户证书需要在你的   远程计算机(具有PERL脚本的计算机)。除此之外,我会   如果你有更多的细节,很乐意提供帮助。

您可以尝试跟踪错误:http://search.cpan.org/perldoc/DBI#TRACING

DBI_TRACE=8=/tmp/dbitrace.log
export DBI_TRACE
./your_program.pl

您可以使用shell变量来确保在Perl和shell中执行相同的操作:

export DB_HOST="your host"
export DB_USER=""
export DB_PWD=""
export DB_DATABASE=""
mysql -h "$DB_HOST" --port 3306 -u "DB_USER" --ssl-cert=/etc/mysql/certs/client-cert.pem --ssl-key=/etc/mysql/certs/client-key.pem -p "$DB_DATABASE"

my $dbh = DBI->connect( 
  "DBI:mysql:database=$ENV{"DB_HOST"};host=$ENV{"DB_HOST"}; 
  mysql_ssl=1; 
  mysql_ssl_client_key=/etc/mysql/certs/client-key.pem; 
  mysql_ssl_client_cert=/etc/mysql/certs/client-cert.pem; 
  mysql_ssl_ca_file=/etc/mysql/certs/ca-cert.pem", 
  '', 
  '' 
) || die DBI->errstr;