长时间阅读,但这是我的第一个问题。
我在数据中心有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'选项编译。
我无法弄清楚或找到进一步调试的方法。任何帮助将不胜感激。
谢谢!
答案 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;