MySQL:显式主机名与带通配符的主机名

标签 mysql

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/

相关文章:

mysql - mysql 中如何将字符串转换为浮点型?

mysql - 显示同时存在于 MYSQL 表和/或 R 对象中的数据

php - Mysql - 插入或更新并获取旧值

php - foreach 循环在达到限制之前中断

java - 如何允许用户从 Netbeans 中的 JSP 页面将数据添加到 MySql 数据库

mysql - 计算有多少客户在第一次、第二次……订单后不到一个月内下订单

php - 使用 WordNet 创建一个简单的字典

php - Laravel ownsToMany 在多对多关系中的数据透视表 id 上插入 '0'?

javascript - 使用 HTML5 拖放在 MYSQL 中保存 div 的值

php - 如何处理 n :m relation correctly with PHP&MySQL?