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

我们有一个PHP命令行脚本来版本化数据库。 只要开发者添加了新的数据库补丁,我们就运行这个脚本。

脚本使用MySQL命令行运行修补程序:

system('mysql --user=xxx --password=xxx < patch.sql'); 

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

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

这显然是正确的,但可能或可能不会成为用户的问题。

  • 什么是安全的select呢?
  • 或者,是否可以禁用此警告?

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

在最近的GA版本的MySQL中,即版本 5.6 ,你可以通过mysql_config_editor命令来完成,如http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html

基本上,它的作用是:用主机别名encryption你的用户/密码凭证,然后使用主机别名,把这些信息放到主目录下的configuration文件中,然后当你需要的时候,而不是像:

 mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql 

你改为写:

 mysqldump --login-path=myhostalias mydatabase > dumpfile.sql 

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

为了这个工作,你首先必须(只有一次)定义myhostalias为:

 mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password 

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

作为一个说明,我相信,这个function不存在于5.6以下的任何版本。

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

进一步阅读,你说你不想依赖外部密码文件,但这是唯一真正安全的方法。 其他任何东西都会在进程表中留下痕迹。 你甚至可以把密码文件放在版本控制中,如果你真的想的话。 使它成为600(或400),只有mysql或它正在运行的用户可读。

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

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

为了您的需要, MYSQL_PWD可能是一个选项,但它不是更安全。 真的,你应该用--password生成一个交互过程,并交互地提交密码,但是这个问题的解决scheme相当复杂。

如果你的PHP脚本已经有了一个开放的数据库连接,为什么不使用mysqli_multi_query()来导入.sql文件呢? 如果.sql文件的语法是有效的,当然…