【问题标题】:Mysqldump launched by cron and password securitycron 启动的 mysqldump 和密码安全
【发布时间】:2011-10-15 05:41:58
【问题描述】:

我编写了一个脚本来备份我的 MySQL 数据库,使用:

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql

一个 cron 每天晚上启动它并将结果 scp 到另一台服务器。 mypassword 在我的脚本中清晰显示,每个人都可以通过适当的权限看到它。我也被告知 /proc 问题(可以看到 cmd 运行)。

MySQL 文档说:

在命令行上指定密码应该被认为是不安全的。请参阅第 7.6 节“保护您的密码安全”。

我在任何地方都没有找到这个神奇的 7.6 部分。

处理自动mysqldump和密码安全的好习惯是什么?

【问题讨论】:

标签: mysql security mysqldump


【解决方案1】:

引用 MySQL 文档(http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html):

将您的密码存储在选项文件中。例如,在 Unix 上,您可以在主目录中 .my.cnf 文件的 [client] 部分列出您的密码:

[client]
password=your_pass

为了保证密码安全,除了您自己之外,任何人都不能访问该文件。为确保这一点,请将文件访问模式设置为 400 或 600。例如:

shell> chmod 600 .my.cnf

要从命令行命名包含密码的特定选项文件,请使用--defaults-file=file_name 选项,其中file_name 是文件的完整路径名。

【讨论】:

  • 非常感谢您的回答!正是我需要的。
  • 试试这个。几天后我会知道它是否能满足我的需要,一旦 logrotate 再次运行。
  • 坏事是 MySQL 之后不会询问任何密码。想要的只是在运行 mysqldump 时密码不会暴露。
  • 添加--defaults-file=file_name 的人必须从命令中删除-p 标志。
  • 此方法将密码存储在纯文本文件中。更安全的方法是使用mysql_config_editor 创建加密登录路径。我已经发布了另一个答案,解释了如何做到这一点。
【解决方案2】:

要添加到上面 Sahil 的答案,请使用 --defaults-extra-file

--defaults-额外文件 用于告诉程序在标准选项文件之外读取单个特定选项文件。

而 --defaults-file 被读取而不是默认的 my.cnf 文件。

【讨论】:

  • 必须是 mysqldump 的 first 参数,格式为 --defaults-extra-file=my-file。花了我几次迭代终于阅读了文档...
  • 这将按预期完成工作。
【解决方案3】:

接受的答案将密码存储在纯文本文件中,任何具有管理(root)访问权限的人都可以读取该文件。如果您的数据库处于共享托管环境中,这是不可取的。

更好的选择是使用mysql_config_editor 创建一个名为mysqldump 的加密登录路径。根据MySQL documentation

mysql_config_editor 对 .mylogin.cnf 文件进行加密,使其无法作为明文读取,并且其内容在被客户端程序解密时仅在内存中使用。通过这种方式,密码可以以非明文格式存储在文件中,供以后使用,而无需在命令行或环境变量中公开。

以下命令将创建您的mysqldump 登录路径:

mysql_config_editor set --login-path=mysqldump --host=your_hostname --user=your_username --password

系统将提示您输入密码,您创建的登录路径将以加密格式存储。 mysqldump 将在您以后调用它时自动使用此登录路径,除非您使用 --login-path 命令行选项指定不同的登录路径。

以下是在创建加密登录路径后调用mysqldump 的方法:

mysqldump database_name > output_file

【讨论】:

  • 你的命令不工作,你忘了在 mysql_config_editor 之后“设置”。否则,这应该是正确的答案。
  • @SimZal 感谢您注意到这一点!我已经更新了我的帖子。
  • 我不断收到Got error: 1045: Access denied for user 'user'@'localhost' (using password: YES) when trying to connect,但用户名和密码正确。有谁知道我为什么会收到这个错误?
  • 我知道为什么会出现这个错误。我的凭据不正确。实际上,hostname 是不对的。原来 Hostgator 使用了另一个主机名。
  • @a.barbieri 正如我在答案中提到的,如果您需要存储一组额外的凭据,您应该可以使用备用的--login-path。所以像mysql_config_editor set --login_path=other_account 等,然后当你调用mysqldump 时,你只需调用另一个login_path:mysqldump --login_path=other_account database_name > output_file。此处的文档:dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.htmldev.mysql.com/doc/refman/8.0/en/…
【解决方案4】:

这里的所有答案都是零散的,因此共享一个完整的命令,如果数据库很大,则必须使用该命令,--single-transaction--lock-tables 在这里非常重要 p>

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz;

注意:答案是Avibodha和sahil答案的补充,他们已经说明了这一点。我只是用important measure should be taken at time of backing up live database将他们的答案放在一段代码中

【讨论】:

    【解决方案5】:

    查看Keeping Passwords Secure 以获得好的答案。您可以将密码存储在 my.cnf 文件中,更改该文件的权限以确保密码安全。

    您也可以查看此页面上的最后一条评论:

    MYSQL_PWD="tinkerbell" mysqldump -ubackup --all-databases > dump.sql

    【讨论】:

      【解决方案6】:

      以下方法适用于我在 Windows 机器上,如果您安装了 2 个版本的 MySQL,并且在运行 mysqldump 时不确定使用哪个 my.ini,这也会有所帮助:

      1、C:\ProgramData\MySQL\MySQL Server 5.6\my.ini,好【客户端】,替换为:

      [client]
      user=my_user
      password=my_password
      

      2、使用这个命令:

      C:\Program Files\MySQL Server 5.6\bin>mysqldump --default-extra-file="C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" -u my_user db_to_export > db_to_export.sql

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 2017-12-14
        相关资源
        最近更新 更多