MySQL 用户应使用以下指南来保证密码安全。
当你运行客户端程序连接到 MySQL 服务器时,不建议以可能被其他用户发现的方式指定你的密码。下面列出了在运行客户端程序时可用于指定密码的方法,以及对每种方法的风险评估。简而言之,最安全的方法是让客户端程序提示输入密码,或者在妥善保护的选项文件中指定密码。
使用 mysql_config_editor 实用程序,它允许你将身份验证凭据存储在名为
.mylogin.cnf
的加密登录路径文件中。该文件稍后可以由 MySQL 客户端程序读取,以获取连接到 MySQL 服务器的身份验证凭据。请参阅 第 6.6.7 节,“mysql_config_editor - MySQL 配置实用程序”。在命令行上使用
--password=
或密码
-p
选项。例如:密码
$> 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=
选项,其中文件名
文件名
是文件的完整路径名。例如:$> 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
。任何此类文件都应具有限制性访问模式。