Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

8.2.1 账户用户名和密码

MySQL 将账户存储在 mysql 系统数据库的 user 表中。一个账户由用户名和可以连接到服务器的客户端主机或主机列表定义。关于 user 表中账户表示的信息,请见 第8.2.3节,“Grant Tables”

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

在 MySQL 和操作系统之间,有多种区别在用户名和密码的使用上:

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

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

    Warning

    MySQL 用户名长度限制是硬编码在 MySQL 服务器和客户端中的,并且尝试绕过它的方法不起作用。

    您绝不能对 mysql 数据库中的表结构进行任何修改,除非按照 第3章,《Upgrading MySQL》 中描述的方法。尝试以其他方式重新定义 MySQL 系统表将导致未定义的行为。服务器可以忽略由于这种修改而变得不良的行。

  • 为了使用内置身份验证方法验证客户端连接的账户,服务器使用 user 表中的密码。这些密码与操作系统登录密码无关。没有必要的连接存在于使用 Windows 或 Unix 机器登录的外部密码和访问 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安装过程将初始化grant表格,创建一个初始的root账户,如第2.9.4节,“初始MySQL账户的安全”中所述,该节还讨论如何为其分配密码。然后,您通常使用语句,如CREATE USERDROP USERGRANTREVOKE来设置、修改和删除MySQL账户。查看第8.2.8节,“添加账户、分配权限和删除账户”第15.7.1节,“账户管理语句”

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

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

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

$> mysql -u finley -p db_name

如果您省略了在--password-p选项后面的密码值(如前所示),客户端将提示输入密码。Alternatively,密码可以在命令行中指定:

$> 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 服务器”