我有一个 mysql 用户通过 SSL(mysql 5.0.77)从 Server2 连接到 Server1。
这是 Server1 上该用户的授权(server2 的 IP 在 xx.xx.xx.% 范围内)
mysql> show grants for user@'xx.xx.xx.%';
+-------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected].% |
+-------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'xx.xx.xx.%' IDENTIFIED BY PASSWORD 'xxx' REQUIRE SSL |
我做了一个flush privileges
,但即使没有权限,我仍然能够显示数据库、显示表、选择。这怎么可能?!!!
我检查了“显示完整进程列表”中用户并非始终处于连接状态,而是全新的 mysql 连接。一旦连接打开,我就会执行“显示授权”,有效权限是相同的... 使用。
--
mysql.db 表有此用户的条目,表明他在数据库中拥有 select、insert、update 和 delete 权限。那么这是一种隐藏权限表吗?这些权限怎么会存在那里而不是 mysql.user 中呢?
答案1
您可能在 mysql.user 中有一个匿名用户。
首先,请运行此查询:
SELECT USER(),CURRENT_USER();
用户()报告您尝试进行身份验证的方式
当前用户()报告 mysqld 如何允许进行身份验证
如果第二个函数发现了一个奇怪的用户,那么很有可能是匿名用户。
转至我的 DBA StackExchange 回答,了解 MySQL 如何执行用户身份验证以及如何以及为何删除匿名用户。