在命令行上使用 MySQL 密码的安全替代方法是什么?

Ben*_*rel 39 mysql php command-line-interface

我们有一个 PHP 命令行脚本来对数据库进行版本控制。每当开发人员添加新的数据库补丁时,我们都会运行此脚本。

该脚本使用 MySQL 命令行运行补丁:

system('mysql --user=xxx --password=xxx < patch.sql');
Run Code Online (Sandbox Code Playgroud)

但是,MySQL 5.6 现在发出以下警告:

警告:在命令行界面上使用密码可能不安全

这显然是正确的,但对用户来说可能是也可能不是问题。

  • 那么安全的替代方案是什么?
  • 或者,是否可以禁用此警告?

请注意,我不想依赖外部密码文件。

小智 21

在最近的 MySQL GA 版本,即5.6版中 ,您可以通过 mysql_config_editor 命令执行此操作,如http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html 中所述

基本上它的作用是:使用主机别名加密您的用户/通行凭证,然后使用主机别名,将此信息放入主目录中的配置文件中,然后在需要时,而不是执行类似操作:

mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

你改为写:

mysqldump --login-path=myhostalias mydatabase > dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

从而避免将您的密码以明文形式放入某些脚本中。

为此,您首先必须(仅一次)定义myhostalias为:

mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password
Run Code Online (Sandbox Code Playgroud)

您可以根据需要为不同的帐户和/或主机使用不同的登录路径。如果你问我,这是个好主意。

请注意,我相信,此功能在 5.6 以下的任何版本中都不存在。


lsd*_*lsd 9

使用--defaults-file--defaults-extra-file选项。您可以在其中指定用户 ID 和密码。它的格式与/etc/my.cnf.

进一步阅读,您说您不想依赖外部密码文件,但这是唯一真正安全的方法。其他任何东西都会在进程表或其他东西中留下痕迹。如果您真的愿意,您甚至可以将密码文件置于版本控制中。将其设置为 600(或 400)并且只能由 mysql 或运行它的用户读取。


R. *_* S. 6

每个http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html有 4 个选项

  • 在命令行上使用-pyour_passor--password=your_pass选项
  • 在没有指定密码值的情况下在命令行上使用-por--password选项。在这种情况下,客户端程序以交互方式请求密码:
  • 将您的密码存储在选项文件中。
  • 将您的密码存储在MYSQL_PWD环境变量中

根据您的需要,MYSQL_PWD可能是一种选择,但它不再安全。确实,您应该生成一个交互式进程--password并以交互方式提交密码,但对于此问题的解决方案相当复杂。