MySQL帐户名称由用户名和主机名组成,它可以为具有来自不同主机连接的用户名的用户创建不同的帐户。本节介绍帐户名称的语法,包括特殊值和通配符规则。
在大多数方面,帐户名称与MySQL角色名称类似,具有一些差异创建用户
,格兰特
, 和设置密码
并遵循以下规则:
帐户名称语法是
'
.user_name
“@”主机名
'的
@'
部分是可选的。仅由用户名组成的帐户名等同于主机名
''
.例如,user_name
' @ ' % '“我”
相当于“我”@“%”
.如果用户名和主机名是合法的标识符,则不需要用引号括起来。引号必须使用
user_name
字符串包含特殊字符(如空格或-
或者一个主机名
字符串包含特殊字符或通配符(例如.
或者%
).例如,在帐户名“试用者,“@”%。com”
,用户名和主机名部分都需要引号。将用户名和主机名作为标识符或字符串引用,使用反响(
`
),单引号('
)或双引号("
).对于字符串引用和标识符引用指南,请参阅字符串字面值, 和架构对象名称.如果引用,则用户名和主机名零件必须单独引用。这是,写
'我'@'localhost'
,而不是“me@localhost”
.后者实际上相当于“我@ localhost'@'%'
.
数据库中的授予表中存储帐户名mysql
系统数据库使用单独列的用户名和主机名零件:
有关存储在授权表中的用户名和主机名属性(如最大长度)的其他详细信息,请参见”@“localhost”.
帐户名的主机名部分可以采用多种形式,允许使用通配符:
主机名可以是主机名,也可以是IP地址(IPv4或IPv6)。这个名字
'localhost'
本地主机。IP地址“127.0.0.1”
IPv4环回接口。IP地址':: 1'
IPv6环回接口。的
%
和_
在主机名或IP地址值中允许通配符字符。这些具有与模式匹配的模式匹配操作相同的含义与喜欢
操作员。例如,主机值“%”
匹配任何主机名,而值'%.10bet靠谱mysql.com'
中的任何主机10bet靠谱
域。“198.51.100. %”
匹配198.51.100 C类网络中的任何主机。因为允许在主机值中使用IP通配符值(例如,
“198.51.100. %”
为了匹配子网上的每个主机),有人可以通过命名主机来尝试利用这个功能198.51.100.somewhere.com.
.为了阻止这种尝试,MySQL不会对以数字和点开头的主机名进行匹配。例如,主机的名称1.2.example.com
,其名称永远不会与帐户名称的主机部分匹配。IP通配符值只能匹配IP地址,而不是主机名。对于指定为IPv4地址的主机值,可以给出网络掩码,以指示用于网络号的地址比特数。NetMask表示法不能用于IPv6地址。
语法
.例如:host_ip
/网络掩码
创建用户'david'@'198.51.100.0 / 255.255.255.0';
这使得能够
大卫
从具有IP地址的任何客户端主机连接client_ip
满足下列条件:client_ip&网络掩码=host_ip
也就是说,对于
创建用户
声明刚才显示:client_ip& 255.255.255.0 = 198.51.100.0
满足此条件的IP地址范围为
198.51.100.0.
来198.51.100.255
.netmask通常以设置为1的位开始,后面是设置为0的位。例子:
198.0.0.0/255.0.0.0.
:198级网络上的任何主机198.51.0.0/255.255.0.0
: 198.51 B类网络中的任何主机198.51.100.0 / 255.255.255.0
:198.51.100级Class的任何主机198.51.100.1.
:仅指定此IP地址的主机
正如MySQL 8.0.23的那样,可以使用CIDR符号写入指定为IPv4地址的主机值,例如
198.51.100.44/24
.
使用系统DNS解析器返回的客户端主机名称或IP地址的值,服务器对客户端主机的帐户名称中的Host值与客户端主机进行匹配。除了使用NetMask符号指定帐户主值值的情况下,服务器也将此比较作为字符串匹配,即使对于作为IP地址给出的帐户主机值也是如此。这意味着您应该以与DNS使用的相同格式指定帐户主机值。以下是要注意的问题的例子:
假设本地网络上的主机具有完全限定名
host1.example.com
.如果DNS将此主机的名称查找返回为host1.example.com
,在帐户主机值中使用该名称。如果DNS返回host1
, 用host1
代替。如果DNS将给定主机的IP地址返回为
198.51.100.2.
,它与帐户主机值匹配198.51.100.2.
但不是198.051.100.2
.类似地,它匹配如下的帐户主机模式198.51.100。%
但不是198.051.100. %
.
为了避免类似的问题,最好检查DNS返回主机名和地址的格式。MySQL帐户名中使用相同格式的值。