mysql支持使用名为.mylogin.cnf的文件中存储的本地身份验证凭据进行无密码登录(有关更多详细信息,请参阅此处)。
例如:
mysql --login-path=local
我的问题是:如何使用DBD::mysql在perl中实现这一点?
DBD::mysql使用mysql C API,它似乎不支持登录路径。作为替代方案,您可以在connect
调用中使用选项文件以及mysql_read_default_file
和mysql_read_default_group
选项:
use strict;
use warnings 'all';
use DBI;
my $dsn = 'DBI:mysql:' .
';mysql_read_default_group=local' .
';mysql_read_default_file=/path/to/config';
my $dbh = DBI->connect($dsn, undef, undef, {
PrintError => 0,
RaiseError => 1
});
您的选项文件应该如下所示:
[local]
host = localhost
database = foo
user = myuser
password = mypassword
[remote]
host = remote.example.com
database = foo
user = myuser
password = mypassword
请注意,与.mylogin.cnf(--login-path
使用的文件)不同,常规选项文件不加密。这并不像听起来那么大的问题。加密的主要好处是,它可以防止您意外暴露凭据,例如在查看文件时,但它不能提供牢不可破的安全性。您仍然可以通过确保选项文件不是世界可读的,将其从版本控制等中排除来保护它。