我希望有一个受到适当保护的PHP基于Web的工具来运行mysqlcheck
一般的数据库表运行状况,但我不希望密码在进程列表中可见.我想运行这样的东西:
$output = shell_exec('mysqlcheck -Ac -uroot -pxxxxx -hhostname');
// strip lines that's OK
echo '<pre>'.preg_replace('/^.+\\sOK$\\n?/m', '', $output).'</pre>';
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用a shell_exec()
,我必须在命令行中包含密码,但我担心密码会显示在进程列表中(ps -A | grep mysqlcheck
).
在我的测试机器上使用mariadb 5.5,mysqlcheck没有在进程列表中显示密码,但是我的生产机器没有运行mariadb并且运行不同的操作系统而且我想要在安全方面而不是运行这些在生产方面进行测试.
所有版本的mysql是否也隐藏了进程列表中的密码?我的担忧是不是问题?
是的,至少从MySQL 5.1开始,客户端会在命令行上隐藏密码.
我从2009年前MySQL社区经理Lenz Grimmer发现了这个博客,其中他链接到MySQL 5.1源代码中的相关代码. http://www.lenzg.net/archives/256-Basic-MySQL-Security-Providing-passwords-on-the-command-line.html
您也可以根本不在命令行上传递密码,而是将用户/密码凭据存储在PHP有权读取的文件中,然后执行客户端:
mysqlcheck --defaults-extra-file=/etc/php.d/mysql-client.cnf
Run Code Online (Sandbox Code Playgroud)
文件名是一个例子; 您可以指定所需的任何路径.关键是大多数MySQL客户端工具都接受该--defaults-extra-file
选项.有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/option-file-options.html.