文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF(美国信纸) - 40.0MB
PDF (A4) - 40.1MB
手册页 (TGZ) - 258.2KB
手册页 (Zip) - 365.3KB
信息 (Gzip) - 4.0MB
信息 (Zip) - 4.0MB


MySQL 9.0 参考手册  /  ...  /  密码安全的最终用户指南

8.1.2.1 密码安全的最终用户指南

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

    为了保证密码安全,该文件应该只有你自己可以访问。为此,请将文件访问模式设置为 400600。例如:

    $> 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 USERALTER USER,因此如果您使用这些语句,它们将被记录在历史记录文件中。为了确保此文件的安全,请使用限制性访问模式,与之前针对 .my.cnf 文件描述的方式相同。

如果您的命令解释器维护历史记录,则保存命令的任何文件都包含在命令行上输入的 MySQL 密码。例如,bash 使用 ~/.bash_history。任何此类文件都应具有限制性访问模式。