暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【ACDU翻译】MySQL 6.2.4 指定账户名称

原创 由迪 2021-08-25
233

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

在大多数方面,帐户名称与 MySQL 角色名称相似,但在第 6.2.5 节“指定角色名称”中描述了一些差异。

账户名称将出现在SQL语句,如 CREATE USERGRANTSET PASSWORD并遵守以下原则:

  • 帐户名称语法是 . '*user_name*'@'*host_name*'
  • 该 部分是可选的。仅由用户名组成的帐户名等效于 。例如,相当于 。 @'*host_name*'``'*user_name*'@'%'``'me'``'me'@'%'
  • 如果用户名和主机名作为未加引号的标识符合法,则不需要加引号。如果报价必须使用 *user_name*字符串中包含特殊字符(例如空间或-),或一个 *host_name*字符串包含特殊字符或通配符(例如 .%)。例如,在 account name 中'test-user'@'%.com',用户名和主机名部分都需要引号。
  • 使用反引号 ( ```)、单引号 ( ') 或双引号 ( ") 将用户名和主机名引用为标识符或字符串。有关字符串引用和标识符引用指南,请参阅 第 9.1.1 节“字符串文字”第 9.2 节“架构对象名称”
  • 用户名和主机名部分(如果引用)必须单独引用。也就是说,写 'me'@'localhost',不是 'me@localhost'。后者实际上相当于'me@localhost'@'%'.
  • CURRENT_USER orCURRENT_USER()函数的引用相当于从字面上指定当前客户端的用户名和主机名。

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

  • user表包含每个帐户的一行。该UserHost列存储用户名和主机名。此表还指示帐户具有哪些全局权限。

  • 其他授权表指示帐户对数据库和数据库中的对象的特权。这些表有 UserHost列来存储帐户名称。这些表中的每一行都与user表中具有相同UserHost 值的帐户相关联。

  • 出于访问检查目的,用户值的比较区分大小写。Host 值的比较不区分大小写。

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

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

帐户名的用户名部分要么是与传入连接尝试的用户名字面匹配的非空值,要么是与任何用户名匹配的空值(空字符串)。具有空白用户名的帐户是匿名用户。要在 SQL 语句中指定匿名用户,请使用带引号的空用户名部分,例如''@'localhost'.

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

  • 主机值可以是主机名或 IP 地址(IPv4 或 IPv6)。名称'localhost'表示本地主机。IP 地址'127.0.0.1' 表示 IPv4 环回接口。IP 地址 '::1'表示 IPv6 环回接口。

  • 主机名或 IP 地址值中允许 使用%_通配符。这些与使用LIKE运算符执行的模式匹配操作具有相同的含义。例如,主机值'%'匹配任何主机名,而值 '%.mysql.com'匹配mysql.com域中的任何主机 。 '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*/*netmask*

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

    这使得david可以从具有满足*client_ip*以下条件的 IP 地址的任何客户端主机进行连接 :

    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 的位。 示例:

    • 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 开始,可以使用 CIDR 表示法编写指定为 IPv4 地址的主机值,例如 198.51.100.44/24.

服务器使用系统 DNS 解析器为客户端主机名或 IP 地址返回的值,将帐户名中的主机值与客户端主机进行匹配。除了使用网络掩码表示法指定帐户主机值的情况外,服务器将这种比较作为字符串匹配来执行,即使对于作为 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 帐户名称中使用相同格式的值。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论