没有使用所有特权的用户

MySQL服务器升级后遇到问题。 大概,升级程序往南走。 结果是,没有一个用户获得了所有的特权授予。

所有的pipe理员已经授予select,插入,更新,删除,创build,删除,重新加载,closures,进程,文件,引用,索引,更改,显示数据库,超级,创build临时表,锁表,执行,复制从属,复制客户,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,TRIGGER ONGRANT OPTION

它看起来非常像所有特权翻译成个人特权,但显然缺less某些东西。 在审查列出的特权后,我发现所有用户都缺lessEVENT特权。

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可能失败(或者在升级脚本中缺less) 。

在意识到出了什么问题之后,我开始在这里寻找一个解决scheme(我的意思是,如果没有用户有这个特权,我该怎么办?),并没有像这个问题那样发现问题。

您应该了解–skip-grant-tables MySQL启动选项 – 它允许绕过权限检查以进行恢复。 使用此选项启动的守护程序将允许在没有授予所有权限的情况下进行root用户login。 你可以从那里改变你喜欢的任何东西。

注意:由于使用无密码root帐户运行可能会带来安全风险,因此您应该确保指定–skip-networking

所以我想我会问,但后来我想“ 等一下,如果… ”,并试图UPDATE自己的用户表…… VOILA! MySQL居然让我这样做!

所以这里是:

问题 :如何恢复缺less的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) 

然后再次login到MySQL,就是这样 – SHOW GRANTS显示再次具有ALL PRIVILEGES根。


所以(这是我的猜测,纠正我,如果我错了),只要你仍然有影响mysql特权表的UPDATE特权,你几乎可以授予你或他人的任何特权手动)。

我敢肯定,这在概念上是可以的(因为我有UPDATE …),但作为一个侧面说明,我会说这有点奇怪,我可以改变我自己的特权到一个更大的集合。