MySQL帐户名称由用户名和主机名组成,这样可以为从不同主机连接的具有相同用户名的用户创建不同的帐户。本节描述帐户名的语法,包括特殊值和通配符规则。
在大多数方面,帐户名类似于MySQL角色名,有一些不同之处请参见创建用户
,格兰特
,设置密码
并遵循这些规则:
帐户名称语法为
'
.user_name
“@”host_name
'的
@”
部分是可选的。仅由用户名组成的帐户名相当于host_name
''
.例如,user_name
' @ ' % '“我”
等于“我”@“%”
.如果用户名和主机名作为不加引号的标识符是合法的,则不需要加引号。必须使用引号,如果a
user_name
字符串包含特殊字符(如空格或-
),或host_name
字符串包含特殊字符或通配符(例如.
或%
).例如,在帐户名中“试用者,“@”%。com”
,用户名和主机名部分都需要加引号。引用用户名和主机名作为标识符或字符串,使用反引号(
`
)、单引号('
),或双引号("
).有关字符串引用和标识符引用指南,请参见如果用户名和主机名部分被引用,则必须分开引用。也就是说,写
“我”@“localhost”
,而不是“me@localhost”
.后者实际上相当于“me@localhost”@“%”
.参考
CURRENT_USER
或CURRENT_USER ()
函数等效于按字面意思指定当前客户端的用户名和主机名。
的授权表中存储帐户名mysql
系统数据库使用单独列的用户名和主机名部分:
有关授权表中存储的用户名和主机名属性(如最大长度)的其他详细信息,请参见”@“localhost”.
帐户名的主机名部分可以采用多种形式,并且允许使用通配符:
host取值为主机名或IP地址(IPv4或IPv6)。这个名字
“localhost”
本地主机。IP地址“127.0.0.1”
IPv4 loopback接口。IP地址“::1”
表示IPv6 loopback接口。的
%
而且_
主机名或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地址的主机值,可以给出网络掩码以指示网络号使用多少地址位。网络掩码表示法不能用于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
.网络掩码通常以设置为1的位开始,然后是设置为0的位。例子:
198.0.0.0/255.0.0.0
: 198 A类网络中的任意主机198.51.0.0/255.255.0.0
: 198.51 B类网络上的任意主机198.51.100.0/255.255.255.0
: 198.51.100 C类网络中的任意主机198.51.100.1
:只有该IP地址的主机
从MySQL 8.0.23开始,指定为IPv4地址的主机值可以使用CIDR表示法写入,例如
198.51.100.44/24
.
服务器使用系统DNS解析器为客户端主机名或IP地址返回的值,将帐户名称中的主机值与客户端主机进行匹配。除非使用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帐户名使用相同格式的值。