6.2.4 指定帐户名

MySQL 帐户名包含一个用户名和一个主机名,从而可以为具有相同用户名且可以从不同主机进行连接的用户创建不同的帐户。本节介绍如何编写帐户名称,包括特殊值和通配符规则。

CREATE USERGRANTSET PASSWORD之类的 SQL 语句中,帐户名称遵循以下规则:

MySQL 使用用户名和主机名部分的单独列将帐户名存储在mysql系统数据库的授权 table 中:

有关授权 table 中存储的用户名和主机名属性的其他详细信息,例如最大长度,请参见授予 table 范围列属性

用户名和主机名具有某些特殊值或通配符约定,如下所述。

帐户名的用户名部分可以是一个与 Importing 连接尝试的用户名在字面上匹配的非空值,或者是一个与任何用户名匹配的空值(空字符串)。用户名为空的帐户是匿名用户。要在 SQL 语句中指定匿名用户,请使用带引号的空用户名部分,例如''@'localhost'

帐户名的主机名部分可以采用多种形式,并且可以使用通配符:

由于主机值中允许使用 IP 通配符值(例如'198.51.100.%'来匹配子网上的每个主机),因此有人可以通过命名主机198.51.100.somewhere.com来尝试利用此功能。为了阻止此类尝试,MySQL 不会对以数字和点开头的主机名执行匹配。例如,如果主机名为1.2.example.com,则其名称将永远与帐户名的主机部分不匹配。 IP 通配符值只能匹配 IP 地址,不能匹配主机名。

语法为host_ip/netmask。例如:

CREATE USER 'david'@'198.51.100.0/255.255.255.0';

这使david从具有以下条件的 IP 地址* client_ip *的任何 Client 端主机进行连接:

client_ip & netmask = host_ip

也就是说,对于刚刚显示的CREATE USER语句:

client_ip & 255.255.255.0 = 198.51.100.0

满足此条件的 IP 地址范围是198.51.100.0198.51.100.255

网络掩码通常以设置为 1 的位开始,然后是设置为 0 的位。

服务器使用系统 DNS 解析器返回的 Client 端主机名或 IP 地址的值,将帐户名中的主机值与 Client 端主机进行匹配。除了使用网络掩码符号指定帐户主机值的情况之外,服务器甚至会以字符串匹配的形式执行此比较,即使是将帐户主机值指定为 IP 地址也是如此。这意味着您应该以 DNS 使用的相同格式指定帐户主机值。以下是需要注意的问题示例:

为避免此类问题,建议检查 DNS 返回主机名和地址的格式。在 MySQL 帐户名称中使用相同格式的值。

首页