存储 MySQL 客户端密码,或设置无密码验证

存储 MySQL 客户端密码,或设置无密码验证

我正在使用 mysql 命令行客户端,并且我不想每次启动客户端时都需要提供密码。我有什么选择?

答案1

在您的主目录中创建一个名为的文件.my.cnf,如下所示。确保文件系统权限设置为只有拥有者才能读取它(0600)。

[client]
host     = localhost
user     = username.
password = thepassword
socket   = /var/run/mysqld/mysqld.sock
#database = mysql

由于您也标记了您的问题 mysqldump ,所以您应该看看这个问题。

在 cron 任务中使用 mysqldump 无需 root 密码

更新(2016-06-29)如果你正在运行 mysql 5.6.6 或更高版本,你应该看看mysql_config_editor允许您的工具存储凭证在加密文件中。感谢乔瓦尼向我提及此事。

答案2

您可以使用该mysql_config_editor实用程序将身份验证凭据存储在名为的加密登录路径文件中.mylogin.cnf

要创建一组新的凭证,请运行:

mysql_config_editor set --host=db.host.org --user=dbuser --password

并在提示时输入您的密码。

这会将您的身份验证凭据存储在默认client登录路径中。

您可以通过指定不同的选项来存储多个身份验证凭据--login-path

mysql_config_editor set --login-path=db2 --host=db2.host.org --user=dbuser --password

默认情况下,mysql客户端从其他选项文件中读取[client][mysql]组,因此它也会从登录路径文件中读取它们。使用选项--login-path,客户端程序还会从登录路径文件中读取指定的登录路径。从其他选项文件读取的选项组保持不变。请考虑以下命令:

mysql --login-path=db2

客户端从其他选项文件mysql读取[client]和,从登录路径文件读取、和。[mysql][client][mysql][mypath]

要打印出配置文件中存储的所有信息,请运行:

mysql_config_editor print --all=true

有关该实用程序的更多信息,请访问“mysql_config_editor — MySQL 配置实用程序”

答案3

我们决不能假装.mylogin.cnf完全安全,因为我可以使用my_print_defaults -s [use your login-path]让该密码以纯文本显示。这就是 MariaDB 不支持这种“隐蔽安全”方法的原因。

答案4

还有另一种方法,与上述方法正交,但如果其他人正在监视您的显示器,或者您正在保存历史记录,则可能会存在安全风险

尽管如此,它还是一个选项,可以阻止你被提示,我在一次性的docker镜像等中使用它......

mysql -u YOUR_USER --password=YOUR_PASSWORD_HERE your_database -e "your query" etc.

系统不会提示您,如果愿意,您可以在 shell 中设置一个临时别名。

谨慎使用。

mysql Ver 14.14 Distrib 5.5.61-38.13,适用于 debian-linux-gnu (x86_64),使用 readline 5.1

相关内容