MySQL 是否将显式主机名与带有通配符的主机名视为相同?例如,我通过以下方式创建了一个用户:
CREATE USER IF NOT EXISTS 'iga'@'ip-10-11-2-150.aws.example.hostname' IDENTIFIED BY 'SOMEPASSWORD';
现在,我想授予用户权限。我可以像下面这样做,其中通配符解析来自 ip-10-11-2-anything 地址的任何用户吗?
GRANT INSERT, UPDATE, DELETE, SELECT ON iga.* TO 'iga'@'ip-10-11-2-%';
或者,我是否必须明确输入与创建用户时使用的主机名相同的主机名,如下所示:
GRANT INSERT, UPDATE, DELETE, SELECT ON iga.* TO 'iga'@'ip-10-11-2-150.aws.example.hostname';
最佳答案
这是两个不同的用户。如果我们运行这个语句:
GRANT SELECT ON iga.* TO 'iga'@'ip-10-11-%'
然后MySQL将尝试创建一个新用户
'iga'@'ip-10-11-%'
此用户与使用 CREATE USER
语句创建的用户是独立且不同的:
'iga'@'ip-10-11-2-150.aws.example.hostname'
它没有获得 SELECT 权限。要向该用户授予权限,我们需要在 GRANT
语句中给出该用户的全名:
GRANT SELECT ON iga.* TO 'iga'@'ip-10-11-2-150.aws.example.hostname'
<小时/>
当 session 连接到 MySQL 时,它会匹配 mysql.user 表中的一行;如果存在,它将查找精确匹配,否则,它可能会查找通配符匹配。但一旦它匹配了一个用户,那就是它匹配的唯一用户。 session 仅获取与一个用户关联的权限,而不是授予其他用户(也将是通配符匹配)的权限。
关于MySQL:显式主机名与带通配符的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151616/