9

我正在编写一个使用 mysql 的 bash 脚本(用于 cron 作业):

mysql -uusername -ppassword -e 'something;'

我正在寻找一种很好的方法来保存密码以方便在脚本中使用,但同时又能保证该信息对系统上其他用户的安全。可以使用 ps -ef 的用户和可能阅读文本文件的用户...

那么如何保护将在 Linux 上的自动化脚本中使用的密码呢?

4

3 回答 3

16

将所有设置放在一个选项文件中。您可以使用默认~/.my.cnf文件,也可以使用--defaults-file==filename. 请参阅文档4.2.3.4。影响选项文件处理的命令行选项

选项文件包含 mysql 命令的默认设置。例如,您可以将以下内容放入其中。

[mysql]
user=username
password=password
database=yourdb

使选项文件只能由您读取,这样其他用户就看不到您的密码。

于 2013-07-24T07:14:37.653 回答
10

这是 MySQL 5.6.6+ 用户的更新答案

4.6.6 mysql_config_editor — MySQL 配置实用程序中所述,现在有一种更安全的方式来存储 mySQL 密码,它不会将明文密码存储在本地配置文件中。

mysql_config_editor 实用程序(自 MySQL 5.6.6 起可用)使您能够将身份验证凭据存储在名为 .mylogin.cnf的加密登录路径文件中。文件位置在 Windows 上是 %APPDATA%\MySQL 目录,在非 Windows 系统上是当前用户的主目录。MySQL 客户端程序稍后可以读取该文件,以获取用于连接到 MySQL 服务器的身份验证凭据。

可以通过运行以下命令来创建此文件:

mysql_config_editor set --login-path=client  --host=localhost --user=root --password

您可以使用以下命令打印现有设置:

mysql_config_editor print --login-path=client

这将输出当前设置:

[client]
user = root
password = *****
host = localhost

注意密码默认是加密的。

于 2016-08-10T04:00:58.617 回答
4

在运行 cron 作业的用户的主目录中创建一个文件~/.my.cnf。确保其他用户无法读取 ( chmod 600 ~/.my.cnf)

[client]
user=username
password=something 
于 2013-07-24T07:11:40.983 回答