mysql 支持使用存储在名为 .mylogin.cnf 的文件中的本地身份验证凭据进行无密码登录(有关更多详细信息,请参见此处)。
例如:
mysql --login-path=local
我的问题是:如何在 perl 中使用 DBD::mysql 做到这一点?
DBD::mysql 使用 MySQL C API,它似乎不支持登录路径。作为替代方案,您可以在调用中使用选项文件和mysql_read_default_file
andmysql_read_default_group
选项connect
:
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
)不同,常规选项文件未加密。这并不是听起来那么大的问题。加密的主要好处是它可以防止您意外暴露您的凭据,例如在查看文件时,但它不提供牢不可破的安全性。您仍然可以通过确保它不是世界可读的、将其排除在版本控制之外等方式来保护您的选项文件。