在perl-DBD::mysql中使用--login-path=local



mysql支持使用名为.mylogin.cnf的文件中存储的本地身份验证凭据进行无密码登录(有关更多详细信息,请参阅此处)。

例如:

mysql --login-path=local

我的问题是:如何使用DBD::mysql在perl中实现这一点?

DBD::mysql使用mysql C API,它似乎不支持登录路径。作为替代方案,您可以在connect调用中使用选项文件以及mysql_read_default_filemysql_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使用的文件)不同,常规选项文件不加密。这并不像听起来那么大的问题。加密的主要好处是,它可以防止您意外暴露凭据,例如在查看文件时,但它不能提供牢不可破的安全性。您仍然可以通过确保选项文件不是世界可读的,将其从版本控制等中排除来保护它。

最新更新