【问题标题】:Remove privileges from MySQL database从 MySQL 数据库中删除权限
【发布时间】:2013-07-21 21:50:18
【问题描述】:

在您认为这是一个重复的问题之前,我相信我有一个独特的案例,即使它有点笨拙。

几天前,我将我的 Ubuntu 10.04 服务器上的 MySQL 版本升级到了 5.3.3(它比 Ubuntu 10.04 的版本早)。今天,我尝试登录 phpMyAdmin 并发现了有点可怕的Connection for controluser as defined in your configuration failed 错误。

在几个关于如何解决这个问题的 SO 问题的描述之后,我陷入了困境。

  • 我尝试reconfigure phpMyAdmin,但没有成功。
  • 我尝试uninstall phpMyAdmin and reinstall它,但它无法从数据库中删除权限并且失败了。
  • 然后我尝试从数据库中删除用户的 manually remove the privileges - 有点愚蠢,我可能会添加 - 然后删除数据库,然后是用户(使用 flush privileges)。
  • 我完全放弃了 phpMyAdmin 的整个安装(删除应用程序和 /etc/phpmyadmin 目录)并重新安装(使用 apt-get),但它说 phpmyadmin 用户的权限已经存在:

granting access to database phpmyadmin for phpmyadmin@localhost: already exists

所以,这就是我剩下的。我有一项无法修改或撤销的授权:

mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'                                                |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.26 sec)

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'

(别担心,我不再使用这个密码,但它是以前使用的密码,不是我为新安装 phpmyadmin 选择的密码)。

如何完全删除这些授权/特权?如果需要的话,我很高兴从头开始(phpmyadmin,而不是 DB)。

【问题讨论】:

    标签: mysql ubuntu phpmyadmin privileges grant


    【解决方案1】:

    顺便说一句,revoke usage on *.* from 'phpmyadmin'@'localhost'; 不起作用的原因很简单:没有名为 USAGE 的授权。

    The actual named grants are in the MySQL Documentation

    授权USAGE 是一个逻辑授权。如何? 'phpmyadmin'@'localhost' 在mysql.user 中有一个条目,其中 user='phpmyadmin' 和 host='localhost'。 mysql.user 中的任何行在语义上都表示USAGE。运行DROP USER 'phpmyadmin'@'localhost'; 应该可以正常工作。在引擎盖下,它确实是这样做的:

    DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost';
    DELETE FROM mysql.db   WHERE user='phpmyadmin' and host='localhost';
    FLUSH PRIVILEGES;
    

    因此,从mysql.user 中删除一行构成运行REVOKE USAGE,即使REVOKE USAGE 不能真正执行。

    【讨论】:

      【解决方案2】:

      mysql 中的 USAGE 权限仅表示在全局级别 *.* 上定义的用户 'phpadmin'@'localhost' 没有权限。此外,同一用户对数据库 phpmyadmin phpadmin.* 具有 ALL 权限。

      因此,如果您想删除所有权限并完全从头开始,请执行以下操作:

      • 撤销数据库级别的所有权限:

        REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

      • 删除用户'phpmyadmin'@'localhost'

        DROP USER 'phpmyadmin'@'localhost';

      上述过程将从您的实例中完全删除用户,这意味着您可以从头开始重新创建他。

      给你一些关于上述内容的背景知识:一旦你创建了一个用户,mysql.user 表就会被填充。如果您查看其中的记录,您将看到用户和所有权限都设置为'N'。如果您执行show grants for 'phpmyadmin'@'localhost';,您将看到上面已经很熟悉的输出。简单翻译为“用户在全局级别没有权限”。现在您在数据库级别授予此用户ALL,这将存储在表mysql.db 中。如果您执行SELECT * FROM mysql.db WHERE db = 'nameofdb';,您将在每个权限上看到'Y'

      上面描述的显示了你目前在你的数据库上的场景。因此,拥有一个只有USAGE 权限的用户意味着该用户可以连接,但除了SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; 他没有其他权限。

      【讨论】:

      • 这之后你必须FLUSH PRIVILEGES吗?
      • 直到今天我才看到这个,你的回答解决了权限问题,谢谢。但是,我的 Connection for controluser as defined in your configuration failed 错误仍然存​​在,但这是一个不同的问题。
      • DROP USER 是您从 mysql.user 和 mysql.db 表中完全删除用户访问权限所需的全部内容。 REVOKE 只是将这些表中的一个或两个表中的权限标志切换为“N”以获得指定的权限,但保持用户不变。是的,您需要在REVOKE 语句之后使用FLUSH PRIVILEGES,而不是在DROP 操作之后。
      • 请注意,您授予“给”用户并撤销“来自”用户。我认为 revoke 命令的关键字相同,但不明白为什么会出现语法错误ERROR 1064 (42000)
      • @JoeyT 在我的情况下,GRANTREVOKE 命令后不需要FLUSH PRIVILEGES 命令,其他人也不需要:stackoverflow.com/questions/36463966/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2020-05-01
      • 2010-12-10
      相关资源
      最近更新 更多