6.2.1 帐户用户名和密码
MySQL 将帐户存储在mysql
系统数据库的user
table 中。帐户是根据用户名和 Client 端主机(用户可以从中连接到服务器的主机)定义的。有关user
table 中的帐户 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 端连接进行身份验证,服务器使用存储在
user
table 中的密码。这些密码不同于用于登录 os 的密码。用于登录 Windows 或 Unix 计算机的“外部”密码与用于访问该计算机上的 MySQL 服务器的密码之间没有必要的连接。
如果服务器使用某些其他插件对 Client 端进行身份验证,则该插件实现的身份验证方法可以使用也可以不使用存储在user
table 中的密码。在这种情况下,有可能还使用外部密码对 MySQL 服务器进行身份验证。
-
使用特定于插件的算法对存储在
user
table 中的密码进行加密。有关 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 不适用于ucs2
,utf16
和utf32
,它们不允许用作 Client 端字符集。
MySQL 安装过程会使用初始root
帐户填充授权 table,如第 2.10.4 节“保护初始 MySQL 帐户”所述,该帐户还讨论了如何为其分配密码。之后,通常使用CREATE USER,DROP USER,GRANT和REVOKE之类的语句来设置,修改和删除 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 服务器”。