6.2.1 帐户用户名和密码

MySQL 将帐户存储在mysql系统数据库的usertable 中。帐户是根据用户名和 Client 端主机(用户可以从中连接到服务器的主机)定义的。有关usertable 中的帐户 table 示形式的信息,请参见第 6.2.3 节“授权 table”

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

MySQL 和您的 os 使用用户名和密码的方式有几个区别:

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

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

Warning

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

除非通过第 2.11 节“升级 MySQL”中描述的过程,否则绝不能以任何方式更改mysql数据库中 table 的结构。尝试以任何其他方式重新定义 MySQL 的系统 table 会导致未定义和不受支持的行为。服务器可以随意忽略由于此类修改而导致格式错误的行。

  • 为了对使用内置身份验证方法的帐户的 Client 端连接进行身份验证,服务器使用存储在usertable 中的密码。这些密码不同于用于登录 os 的密码。用于登录 Windows 或 Unix 计算机的“外部”密码与用于访问该计算机上的 MySQL 服务器的密码之间没有必要的连接。

如果服务器使用某些其他插件对 Client 端进行身份验证,则该插件实现的身份验证方法可以使用也可以不使用存储在usertable 中的密码。在这种情况下,有可能还使用外部密码对 MySQL 服务器进行身份验证。

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

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

标准的 MySQLClient 端程序支持--default-character-set选项,该选项导致mysql_options()的调用如上所述。此外,如第 10.4 节“连接字符集和排序规则”中所述,支持字符集自动检测。对于使用不基于 C API 的连接器的程序,该连接器可以提供等效于mysql_options()的名称,可以代替该名称使用。检查连接器文档。

前面的 Comments 不适用于ucs2utf16utf32,它们不允许用作 Client 端字符集。

MySQL 安装过程会使用初始root帐户填充授权 table,如第 2.10.4 节“保护初始 MySQL 帐户”所述,该帐户还讨论了如何为其分配密码。之后,通常使用CREATE USERDROP USERGRANTREVOKE之类的语句来设置,修改和删除 MySQL 帐户。参见第 6.2.7 节“添加帐户,分配特权和删除帐户”第 13.7.1 节“帐户 Management 对帐单”

要使用命令行 Client 端连接到 MySQL 服务器,请根据需要为要使用的帐户指定用户名和密码选项:

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

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

shell> mysql -u finley -p db_name

如果您在命令行中的--password-p选项之后忽略了密码值(如所示),则 Client 端会提示 Importing 一个。或者,可以在命令行上指定密码:

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

如果您使用-p选项,则-p与以下密码值之间必须没有空格。

在命令行上指定密码应该被认为是不安全的。参见第 6.1.2.1 节,“最终用户密码安全准则”。为避免在命令行上 Importing 密码,请使用选项文件或登录路径文件。参见第 4.2.2.2 节“使用选项文件”第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”

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