文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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

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

MySQL 用户应使用以下指南来确保密码安全。

当您运行客户端程序以连接到 MySQL 服务器时,建议不要以其他用户可以发现的方式指定您的密码。此处列出了您在运行客户端程序时可用于指定密码的方法,以及对每种方法的风险评估。简而言之,最安全的方法是让客户端程序提示输入密码,或在妥善保护的选项文件中指定密码。

  • 使用 mysql_config_editor 实用程序,它使您能够将身份验证凭据存储在名为 .mylogin.cnf 的加密登录路径文件中。该文件稍后可以由 MySQL 客户端程序读取,以获取用于连接到 MySQL 服务器的身份验证凭据。请参阅 第 6.6.7 节“mysql_config_editor - MySQL 配置实用程序”。

  • 在命令行上使用 --password=password-ppassword 选项。例如

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

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