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

6.2.1 账户用户名和密码

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

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

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

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

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

    警告

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

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

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

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

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

  • If the user name and password contain only ASCII characters, it is possible to connect to the server regardless of character set settings. To enable connections when the user name or password contain non-ASCII characters, client applications should call the mysql_options() C API function with the MYSQL_SET_CHARSET_NAME option and appropriate character set name as arguments. This causes authentication to take place using the specified character set. Otherwise, authentication fails unless the server default character set is the same as the encoding in the authentication defaults.

    Standard MySQL client programs support a --default-character-set option that causes mysql_options() to be called as just described. In addition, character set autodetection is supported as described in Section 10.4, “Connection Character Sets and Collations”. For programs that use a connector that is not based on the C API, the connector may provide an equivalent to mysql_options() that can be used instead. Check the connector documentation.

    The preceding notes do not apply for ucs2, utf16, and utf32, which are not permitted as client character sets.

The MySQL installation process populates the grant tables with an initial root account, as described in Section 2.10.4, “Securing the Initial MySQL Account”, which also discusses how to assign a password to it. Thereafter, you normally set up, modify, and remove MySQL accounts using statements such as CREATE USER, DROP USER, GRANT, and REVOKE. See Section 6.2.7, “Adding Accounts, Assigning Privileges, and Dropping Accounts”, and Section 13.7.1, “Account Management Statements”.

To connect to a MySQL server with a command-line client, specify user name and password options as necessary for the account that you want to use:

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

If you prefer short options, the command looks like this:

$> mysql -u finley -p db_name

If you omit the password value following the --password or -p option on the command line (as just shown), the client prompts for one. Alternatively, the password can be specified on the command line:

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

If you use the -p option, there must be no space between -p and the following password value.

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

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