从MySQL数据库中删除权限

在你认为这是一个重复的问题之前,我相信我有一个独特的,即使有点暗淡的情况。

几天前,我将Ubuntu 10.04服务器上的MySQL版本升级到了5.3.3(比10.04版本的Ubuntu版本高出一些)。 今天,我试图login到phpMyAdmin的东西,发现控制用户的Connection for controluser as defined in your configuration failed错误Connection for controluser as defined in your configuration failed的有点可怕的Connection for controluser as defined in your configuration failed

从几个如何解决这个问题的后续的描述,我已经卡住了。

  • 我试图重新configurationphpMyAdmin ,没有成功。
  • 我试图卸载phpMyadmin并重新安装它,但它不能删除数据库的权限和失败。
  • 然后,我试图手动删除用户的权限 – 我可能会添加 – 从数据库,然后删除数据库,然后用户(具有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安装select的密码)。

我如何完全删除这些赠款/特权? 我很高兴从头开始,如果需要(phpmyadmin,而不是数据库)。

MySQL中的USAGE权限仅仅意味着在全局级*.*定义的用户'phpadmin'@'localhost'没有权限。 此外,同一用户对数据库phpmyadmin phpadmin.*具有ALL-privilege。

所以如果你想删除所有的权限,并从头开始完成以下操作:

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

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

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

    DROP USER 'phpmyadmin'@'localhost';

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

为了给你一些背景介绍:只要你创build一个用户, mysql.user表就会被填充。 如果您查看logging,您将看到用户和所有权限设置为'N' 。 如果您show grants for 'phpmyadmin'@'localhost'; 你会看到,上面的输出已经准备好了。 简单地翻译成“在全球范围内对用户没有特权”。 现在,您在数据库级别授予此用户mysql.db ,这将存储在表mysql.db 。 如果你做一个SELECT * FROM mysql.db WHERE db = 'nameofdb'; 你会在每个priv上看到一个'Y'

上面介绍了目前你在db中的场景。 所以拥有一个只有USAGE特权的用户,意味着这个用户可以连接,除了SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; 他没有其他特权。

作为一个方面的说明, revoke usage on *.* from 'phpmyadmin'@'localhost';的原因revoke usage on *.* from 'phpmyadmin'@'localhost'; 不起作用很简单:没有称为USAGE授权。

实际的命名授权在MySQL文档中

拨款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不能从字面上执行。