2

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

例如:

mysql --login-path=local

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

4

1 回答 1

3

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

于 2016-07-25T15:04:21.367 回答