Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Account User Names and Passwords

8.2.1 账户用户名和密码

MySQL 在 mysql 系统数据库的 user 表中存储账户。账户是根据用户名和客户端主机或主机定义的。有关账户在 user 表中的表示形式,请参阅 第 8.2.3 节,“授权表”

账户也可以具有身份验证凭证,例如密码。凭证由账户身份验证插件处理。MySQL 支持多种身份验证插件。一些插件使用内置身份验证方法,而其他插件启用外部身份验证方法。请参阅 第 8.2.17 节,“可插拔身份验证”

MySQL 中的用户名和密码与操作系统中的用户名和密码有几个区别:

  • MySQL 用于身份验证的用户名与 Windows 或 Unix 中的用户名(登录名)无关。 在 Unix 上,大多数 MySQL 客户端默认尝试使用当前 Unix 用户名作为 MySQL 用户名,但这只是为了方便起见。默认值可以轻松地被覆盖,因为客户端程序允许使用 -u--user 选项指定任何用户名。这意味着任何人都可以尝试使用任何用户名连接到服务器,因此除非所有 MySQL 账户都有密码,否则无法使数据库安全。

  • MySQL 用户名最长为 32 个字符。操作系统用户名的最大长度可能不同。

    Warning

    MySQL 用户名长度限制是硬编码在 MySQL 服务器和客户端中的,并且尝试通过修改 mysql 数据库中的表定义来规避该限制 不起作用

    您绝不应该以任何方式修改 mysql 数据库中的表结构,除非按照 第 3 章,升级 MySQL 中所述的过程。尝试以其他方式重新定义 MySQL 系统表将导致未定义和不受支持的行为。服务器可以忽略由于这种修改而变得畸形的行。

  • 要验证使用内置身份验证方法的客户端连接的账户,服务器使用存储在 user 表中的密码。这些密码与用于登录操作系统的密码不同。没有必要将外部密码与用于访问 MySQL 服务器的密码相连接。

    如果服务器使用其他插件来验证客户端连接,那么插件实现的身份验证方法可能使用或不使用存储在 user 表中的密码。在这种情况下,可能还使用外部密码来验证 MySQL 服务器。

  • 存储在 user 表中的密码使用插件特定的算法加密。

  • 如果用户名和密码仅包含 ASCII 字符,那么可以无论字符集设置如何连接到服务器。要启用包含非 ASCII 字符的用户名或密码的连接,客户端应用程序应该使用 mysql_options() C API 函数,带有 MYSQL_SET_CHARSET_NAME 选项和适当的字符集名称作为参数。这将导致身份验证使用指定的字符集。否则,身份验证将失败,除非服务器默认字符集与身份验证默认编码相同。

    标准 MySQL 客户端程序支持 --default-character-set 选项,该选项会导致 mysql_options() 被调用,如上所述。此外,还支持字符集自动检测,如 第 12.4 节,“连接字符集和排序规则” 中所述。对于不基于 C API 的连接器,连接器可能提供了等效于 mysql_options() 的方法,可以使用该方法代替。请查看连接器文档。

    前面的注意事项不适用于 ucs2utf16utf32,它们不允许作为客户端字符集。

MySQL 安装过程将授予表格填充初始 root 帐户,如 第 2.9.4 节,“保护初始 MySQL 帐户” 所述,也讨论了如何为其分配密码。然后,您通常使用语句设置、修改和删除 MySQL 帐户,例如 CREATE USERDROP USERGRANTREVOKE。请参阅 第 8.2.8 节,“添加帐户、分配权限和删除帐户”第 15.7.1 节,“帐户管理语句”

要使用命令行客户端连接到 MySQL 服务器,需要指定用户名和密码选项,以便使用要连接的帐户:

$> mysql --user=finley --password db_name

如果您喜欢短选项,命令将如下所示:

$> mysql -u finley -p db_name

如果您省略了密码值,紧跟在 --password-p 选项后(如上所示),客户端将提示输入密码。或者,可以在命令行上指定密码:

$> mysql --user=finley --password=password db_name
$> mysql -u finley -ppassword db_name

如果使用 -p 选项,必须在 -p 和后续密码值之间 没有空格

在命令行上指定密码被认为是不安全的。请参阅 第 8.1.2.1 节,“最终用户密码安全指南”。要避免在命令行上输入密码,请使用选项文件或登录路径文件。请参阅 第 6.2.2.2 节,“使用选项文件”第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”

有关指定用户名、密码和其他连接参数的更多信息,请参阅 第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”