4.4指定帐号名称

MySQL帐户名称由用户名和主机名组成,它可以为具有来自不同主机连接的用户名的用户创建不同的帐户。本节介绍帐户名称的语法,包括特殊值和通配符规则。

在大多数方面,帐户名称与MySQL角色名称类似,具有一些差异创建用户,格兰特, 和设置密码并遵循以下规则:

  • 帐户名称语法是user_name“@”主机名

  • @'主机名部分是可选的。仅由用户名组成的帐户名等同于user_name' @ ' % '.例如,“我”相当于“我”@“%”

  • 如果用户名和主机名是合法的标识符,则不需要用引号括起来。引号必须使用user_name字符串包含特殊字符(如空格或-或者一个主机名字符串包含特殊字符或通配符(例如或者).例如,在帐户名“试用者,“@”%。com”,用户名和主机名部分都需要引号。

  • 将用户名和主机名作为标识符或字符串引用,使用反响(),单引号()或双引号().对于字符串引用和标识符引用指南,请参阅字符串字面值, 和架构对象名称

  • 如果引用,则用户名和主机名零件必须单独引用。这是,写'我'@'localhost',而不是“me@localhost”.后者实际上相当于“我@ localhost'@'%'

  • 当前用户或者当前用户()函数等价于按字面意思指定当前客户机的用户名和主机名。

数据库中的授予表中存储帐户名mysql系统数据库使用单独列的用户名和主机名零件:

  • 用户表包含每个帐户的一行。的用户主持人列存储用户名和主机名。此表还表示帐户具有哪些全球权限。

  • 其他的授权表表示帐户对数据库和数据库中的对象拥有的特权。这些表用户主持人列来存储帐户名称。类中的帐户关联这些表中的每一行用户具有相同的用户主持人值。

  • 为了进行访问检查,比较User值是区分大小写的。Host值的比较不区分大小写。

有关存储在授权表中的用户名和主机名属性(如最大长度)的其他详细信息,请参见”@“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帐户名中使用相同格式的值。