MySQL 在 mysql
系统数据库的 user
表中存储账户。账户是根据用户名和客户端主机或主机定义的。有关账户在 user
表中的表示形式,请参阅 第 8.2.3 节,“授权表”。
账户也可以具有身份验证凭证,例如密码。凭证由账户身份验证插件处理。MySQL 支持多种身份验证插件。一些插件使用内置身份验证方法,而其他插件启用外部身份验证方法。请参阅 第 8.2.17 节,“可插拔身份验证”。
MySQL 中的用户名和密码与操作系统中的用户名和密码有几个区别:
-
MySQL 用于身份验证的用户名与 Windows 或 Unix 中的用户名(登录名)无关。 在 Unix 上,大多数 MySQL 客户端默认尝试使用当前 Unix 用户名作为 MySQL 用户名,但这只是为了方便起见。默认值可以轻松地被覆盖,因为客户端程序允许使用
-u
或--user
选项指定任何用户名。这意味着任何人都可以尝试使用任何用户名连接到服务器,因此除非所有 MySQL 账户都有密码,否则无法使数据库安全。 -
MySQL 用户名最长为 32 个字符。操作系统用户名的最大长度可能不同。
WarningMySQL 用户名长度限制是硬编码在 MySQL 服务器和客户端中的,并且尝试通过修改
mysql
数据库中的表定义来规避该限制 不起作用。您绝不应该以任何方式修改
mysql
数据库中的表结构,除非按照 第 3 章,升级 MySQL 中所述的过程。尝试以其他方式重新定义 MySQL 系统表将导致未定义和不受支持的行为。服务器可以忽略由于这种修改而变得畸形的行。 -
要验证使用内置身份验证方法的客户端连接的账户,服务器使用存储在
user
表中的密码。这些密码与用于登录操作系统的密码不同。没有必要将外部密码与用于访问 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()
的方法,可以使用该方法代替。请查看连接器文档。前面的注意事项不适用于
ucs2
、utf16
和utf32
,它们不允许作为客户端字符集。
MySQL 安装过程将授予表格填充初始 root
帐户,如 第 2.9.4 节,“保护初始 MySQL 帐户” 所述,也讨论了如何为其分配密码。然后,您通常使用语句设置、修改和删除 MySQL 帐户,例如 CREATE USER
、DROP USER
、GRANT
和 REVOKE
。请参阅 第 8.2.8 节,“添加帐户、分配权限和删除帐户” 和 第 15.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
和后续密码值之间 没有空格。
在命令行上指定密码被认为是不安全的。请参阅 第 8.1.2.1 节,“最终用户密码安全指南”。要避免在命令行上输入密码,请使用选项文件或登录路径文件。请参阅 第 6.2.2.2 节,“使用选项文件” 和 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关指定用户名、密码和其他连接参数的更多信息,请参阅 第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。