MySQL 将帐户存储在 mysql
系统数据库的 user
表中。帐户是根据用户名以及用户可以从中连接到服务器的客户端主机来定义的。有关 user
表中帐户表示的信息,请参阅 第 8.2.3 节“授权表”。
帐户还可以具有身份验证凭据,例如密码。凭据由帐户身份验证插件处理。MySQL 支持多种身份验证插件。其中一些使用内置身份验证方法,而另一些则允许使用外部身份验证方法进行身份验证。请参阅 第 8.2.17 节“可插拔身份验证”。
MySQL 使用用户名和密码的方式与您的操作系统使用用户名和密码的方式之间存在一些区别
MySQL 用于身份验证目的的用户名与 Windows 或 Unix 使用的用户名(登录名)无关。在 Unix 上,默认情况下,大多数 MySQL 客户端会尝试使用当前 Unix 用户名作为 MySQL 用户名登录,但这只是为了方便起见。默认值可以很容易地被覆盖,因为客户端程序允许使用
-u
或--user
选项指定任何用户名。这意味着任何人都可以尝试使用任何用户名连接到服务器,因此除非所有 MySQL 帐户都有密码,否则您无法以任何方式确保数据库安全。任何指定没有密码的帐户的用户名的人都可以成功连接到服务器。MySQL 用户名最多为 32 个字符。操作系统用户名可能具有不同的最大长度。
警告MySQL 用户名长度限制在 MySQL 服务器和客户端中是硬编码的,试图通过修改
mysql
数据库中表的定义来绕过它是 不可行的。除了通过 第 3 章“升级 MySQL” 中描述的过程之外,您绝不应该以任何方式更改
mysql
数据库中表的结构。尝试以任何其他方式重新定义 MySQL 系统表会导致未定义和不受支持的行为。服务器可以自由忽略由于此类修改而变得格式错误的行。为了对使用内置身份验证方法的帐户的客户端连接进行身份验证,服务器使用存储在
user
表中的密码。这些密码与用于登录到您的操作系统的密码不同。您用于登录 Windows 或 Unix 计算机的“外部”密码与您用于访问该计算机上的 MySQL 服务器的密码之间没有必然的联系。如果服务器使用其他插件对客户端进行身份验证,则插件实现的身份验证方法可能会也可能不会使用存储在
user
表中的密码。在这种情况下,外部密码也可能用于对 MySQL 服务器进行身份验证。存储在
user
表中的密码使用特定于插件的算法进行加密。如果用户名和密码仅包含 ASCII 字符,则无论字符集设置如何,都可以连接到服务器。为了在用户名或密码包含非 ASCII 字符时启用连接,客户端应用程序应该使用
MYSQL_SET_CHARSET_NAME
选项和适当的字符集名称作为参数调用mysql_options()
C API 函数。这将导致使用指定的字符集进行身份验证。否则,除非服务器默认字符集与身份验证默认值中的编码相同,否则身份验证将失败。标准 MySQL 客户端程序支持
--default-character-set
选项,该选项会导致按上述方式调用mysql_options()
。此外,还支持字符集自动检测,如 第 12.4 节“连接字符集和排序规则” 中所述。对于使用非基于 C API 的连接器的程序,连接器可以提供等效于mysql_options()
的方法,可以用来代替它。请查看连接器文档。以上说明不适用于
ucs2
、utf16
和utf32
,因为它们不允许作为客户端字符集。
MySQL 安装过程会使用初始 root
帐户填充授权表,如 第 2.9.4 节“保护初始 MySQL 帐户” 中所述,其中还讨论了如何为其分配密码。之后,您通常使用 CREATE USER
、DROP USER
、GRANT
和 REVOKE
等语句来设置、修改和删除 MySQL 帐户。请参阅 第 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 服务器”。