没有拥有所有权限的用户

没有拥有所有权限的用户

我在升级 MySQL 服务器后遇到了一个问题。可能是升级过程出了问题。结果是没有一个用户拥有所有特权授予。

所有管理人员都授予选择、插入、更新、删除、创建、删除、重新加载、关闭、进程、文件、引用、索引、更改、显示数据库、超级、创建临时表、锁定表、执行、复制从属、复制客户端、创建视图、显示视图、创建例程、更改例程、创建用​​户、触发授予选项

看起来很像所有特权转化为个人权限,但显然缺少了一些东西。在查看列出的权限后,我发现所有用户都缺失了事件特权。

mysql> SELECT * FROM mysql.user WHERE Event_priv='Y'\G
Empty set (0.01 sec)

现在,这种特权在 MySQL 5.16 中添加并且定义为enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',因此可能UPDATE现有用户的升级失败(或在升级脚本中缺失)。

在意识到问题之后,我开始在这里寻找解决方案(我的意思是,如果用户有这个权限,我GRANT该怎么做?),并没有发现与此完全相同的问题。

答案1

您应该意识到--skip-授权表MySQL 启动选项 - 它允许绕过权限检查以进行恢复。使用此选项启动的守护进程将允许 root 登录而无需密码,并授予所有权限。从此以后,您可以更改任何您想要的内容。

注意:使用无密码 root 帐户运行可能会带来安全风险,因此应确保指定--跳过网络也一样。

答案2

所以我想问问,但后来我想“等一下,如果……“并尝试UPDATE自己访问用户表...然后 VOILA!MySQL 真的让我这么做了!

以下是具体内容:

问题:如何恢复丢失的 EVENT 权限?

回答

 mysql> UPDATE mysql.user SET Event_priv='Y' WHERE User='root';
 Query OK, 1 row affected (0.00 sec)

 mysql> FLUSH PRIVILEGES;
 Query OK, 0 rows affected (0.14 sec)

然后再次登录 MySQL,就这样 -再次SHOW GRANTS显示 root 身份ALL PRIVILEGES


所以(这是我的猜测,如果我错了请纠正我),只要您仍然拥有UPDATE影响 mysql 权限表的权限,您就可以手动授予自己或他人任何权限)。

我确信这是概念上好的(因为我确实有UPDATE......),但顺便说一下,我可以将自己的权限改变为更大的权限,这有点奇怪。

相关内容