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