我们有一个PHP命令行脚本来对数据库进行版本控制。每当开发人员添加新的数据库修补程序时,我们都会运行此脚本。
该脚本使用MySQL命令行运行补丁:
system('mysql --user=xxx --password=xxx < patch.sql');
但是,MySQL 5.6现在发出以下警告:
警告:在命令行界面上使用密码可能不安全
这显然是正确的,但对于用户而言可能是问题,也可能不是问题。
- 那么安全的替代方法是什么?
- 或者,可以禁用此警告吗?
请注意,我不需要依赖外部密码文件。
我们有一个PHP命令行脚本来对数据库进行版本控制。每当开发人员添加新的数据库修补程序时,我们都会运行此脚本。
该脚本使用MySQL命令行运行补丁:
system('mysql --user=xxx --password=xxx < patch.sql');
但是,MySQL 5.6现在发出以下警告:
警告:在命令行界面上使用密码可能不安全
这显然是正确的,但对于用户而言可能是问题,也可能不是问题。
请注意,我不需要依赖外部密码文件。
Answers:
在最新的GA版本的MySQL(即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
您改为:
mysqldump --login-path=myhostalias mydatabase > dumpfile.sql
从而避免将密码以明文形式输入到某些脚本中。
为此,您首先必须(仅一次)定义myhostalias为:
mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password
您可以根据需要为不同的帐户和/或主机使用不同的登录路径。如果你问我,那是个很好的主意。
值得一提的是,我相信该功能在5.6以下的任何版本中都不存在。
mysql_config_editor,因此不幸的是,它并不会带来更多的价值。我还试图避免让开发人员手动执行此操作,因此必须同时维护PHP配置文件和 mysql配置。
使用--defaults-file或--defaults-extra-file选项。您可以在其中指定用户名和密码。与的格式相同/etc/my.cnf。
进一步阅读,您说您不想依靠外部密码文件,但这是唯一真正安全的方法。其他任何事情都会在过程表中留下痕迹。如果您确实愿意,甚至可以将密码文件放入版本控制中。将其设置为600(或400),并且只能由mysql或运行它的用户读取。
mysql --defaults-file c:\some\dirs\my.cnf
mysql控制台客户端呢?
每个http://dev.mysql.com/doc/refman/5.1/zh-CN/password-security-user.html您有4个选项
-pyour_pass或--password=your_pass选项-p或--password选项,未指定密码值。在这种情况下,客户端程序以交互方式请求密码:MYSQL_PWD环境变量中对于您的需求,MYSQL_PWD也许是一种选择,但它不再安全。确实,您应该使用生成一个交互过程--password并以交互方式提交密码,但这是解决此问题的相当复杂的方法。
man ps有-E Display the environment as well. 从我挂网址:指定MySQL密码必须是极不安全的,不应该使用这种方法。某些版本的ps包含一个选项,用于显示正在运行的进程的环境。在某些系统上,如果您设置MYSQL_PWD,您的密码将向运行ps的任何其他用户公开。即使在没有此类ps版本的系统上,假设用户没有其他方法可以检查进程环境也是不明智的。
ps并查看每个用户每个进程的命令行参数。但是ps e只显示您自己的进程的环境(除非您当然是root)。它只是稍微更安全,但仍然更安全。