Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.2 访问控制和账户管理  /  6.2.1 账户用户名和密码

6.2.1 账户用户名和密码

MySQL 将帐户存储在系统数据库的user表中 。mysql帐户是根据用户名和用户可以从中连接到服务器的一个或多个客户端主机来定义的。有关user表中帐户表示的信息,请参阅 第 6.2.3 节,“授权表”

帐户还可能具有身份验证凭据,例如密码。凭据由帐户身份验证插件处理。MySQL 支持多种身份验证插件。其中一些使用内置身份验证方法,而另一些则使用外部身份验证方法启用身份验证。请参阅第 6.2.11 节,“可插入身份验证”

MySQL 和您的操作系统使用用户名和密码的方式有几个区别:

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

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

    警告

    MySQL 用户名长度限制在 MySQL 服务器和客户端中是硬编码的,试图通过修改 mysql数据库中表的定义来规避它是行不通的。

    除非通过第 2.11 节“升级 MySQL”mysql中描述的过程,否则您不应该以任何方式 更改数据库中表的结构 。尝试以任何其他方式重新定义 MySQL 的系统表会导致未定义和不受支持的行为。服务器可以自由地忽略由于此类修改而变得畸形的行。

  • 为了对使用内置身份验证方法的帐户的客户端连接进行身份验证,服务器使用存储在user表中的密码。这些密码不同于登录操作系统的密码。您用于登录 Windows 或 Unix 机器的“外部密码与您用于访问该机器上的 MySQL 服务器的密码 之间没有必然联系 。

    如果服务器使用其他插件对客户端进行身份验证,则该插件实现的身份验证方法可能会也可能不会使用存储在user 表中的密码。在这种情况下,外部密码也可能用于对 MySQL 服务器进行身份验证。

  • 存储在user表中的密码使用特定于插件的算法进行加密。有关 MySQL 本机密码哈希的信息,请参阅 第 6.1.2.4 节,“MySQL 中的密码哈希”

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

    标准的 MySQL 客户端程序支持一个 --default-character-set选项,该选项导致 mysql_options()被调用,就像刚才描述的那样。此外,还支持字符集自动检测,如 第 10.4 节“连接字符集和排序规则”中所述。对于使用不基于 C API 的连接器的程序,该连接器可能会提供等效的连接器 mysql_options()。检查连接器文档。

    前面的说明不适用于ucs2utf16utf32,它们不允许作为客户端字符集。

MySQL 安装过程使用一个或多个初始帐户填充授权表。这些帐户的名称和访问权限在 第 2.10.4 节“保护初始 MySQL 帐户”中进行了描述,其中还讨论了如何为它们分配密码。CREATE USER此后,您通常使用、 DROP USERGRANT和 等语句设置、修改和删除 MySQL 帐户 REVOKE。请参阅 第 6.2.7 节,“添加帐户、分配权限和删除帐户”第 13.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

在命令行上指定密码应该被认为是不安全的。请参阅第 6.1.2.1 节,“密码安全的最终用户指南”。为避免在命令行中提供密码,请使用选项文件或登录路径文件。请参阅第 4.2.2.2 节,“使用选项文件”第 4.6.6 节,“mysql_config_editor - MySQL 配置实用程序”

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