MySQL 用户应使用以下指南来确保密码安全。
当您运行客户端程序以连接到 MySQL 服务器时,建议不要以其他用户可以发现的方式指定您的密码。此处列出了您在运行客户端程序时可用于指定密码的方法,以及对每种方法的风险评估。简而言之,最安全的方法是让客户端程序提示输入密码,或在妥善保护的选项文件中指定密码。
使用 mysql_config_editor 实用程序,它使您能够将身份验证凭据存储在名为
.mylogin.cnf
的加密登录路径文件中。该文件稍后可以由 MySQL 客户端程序读取,以获取用于连接到 MySQL 服务器的身份验证凭据。请参阅 第 6.6.7 节“mysql_config_editor - MySQL 配置实用程序”。。在命令行上使用
--password=
或password
-p
选项。例如password
$> mysql -u francis -pfrank db_name
警告这很方便,但不安全。在某些系统上,您的密码会对系统状态程序(例如 ps)可见,其他用户可能会调用这些程序来显示命令行。MySQL 客户端通常会在其初始化序列期间用零覆盖命令行密码参数。但是,仍然有一小段时间内该值是可见的。此外,在某些系统上,此覆盖策略无效,并且密码对于 ps 仍然可见。(SystemV Unix 系统和其他系统可能会出现此问题。)
如果您的操作环境设置为在终端窗口的标题栏中显示您当前的命令,则只要命令正在运行,密码就会一直可见,即使命令已在窗口内容区域中滚动到视图之外也是如此。
在命令行上使用
--password
或-p
选项,但不指定密码值。在这种情况下,客户端程序会以交互方式请求密码$> mysql -u francis -p db_name Enter password: ********
*
字符表示您输入密码的位置。密码在您输入时不会显示。以这种方式输入密码比在命令行上指定密码更安全,因为它对其他用户不可见。但是,这种输入密码的方法仅适用于您以交互方式运行的程序。如果要从以非交互方式运行的脚本调用客户端,则没有机会从键盘输入密码。在某些系统上,您甚至可能会发现脚本的第一行被读取并(错误地)解释为您的密码。
将您的密码存储在选项文件中。例如,在 Unix 上,您可以在主目录中
.my.cnf
文件的[client]
部分中列出您的密码[client] password=password
为了保证密码安全,除了您自己之外,任何人都无法访问该文件。为此,请将文件访问模式设置为
400
或600
。例如$> chmod 600 .my.cnf
要从命令行命名包含密码的特定选项文件,请使用
--defaults-file=
选项,其中file_name
file_name
是文件的完整路径名。例如$> mysql --defaults-file=/home/francis/mysql-opts
第 6.2.2.2 节“使用选项文件”更详细地讨论了选项文件。
在 Unix 上,mysql 客户端会将已执行语句的记录写入历史记录文件(请参阅第 6.5.1.3 节“mysql 客户端日志记录”)。默认情况下,此文件名为 .mysql_history
,并在您的主目录中创建。密码可以纯文本形式写入 SQL 语句中,例如 CREATE USER
和 ALTER USER
,因此,如果您使用这些语句,它们将被记录在历史记录文件中。为了确保此文件的安全,请使用限制性访问模式,与之前针对 .my.cnf
文件所述的方式相同。
如果您的命令解释器维护历史记录,则保存命令的任何文件都包含在命令行上输入的 MySQL 密码。例如,bash 使用 ~/.bash_history
。任何此类文件都应该具有限制性访问模式。