无法删除“ GRANT USAGE”


15

我正在测试一些东西,并添加了:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

所以现在当我做

show grants for cptnotsoawesome@localhost;

我可以看到其中之一是:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

现在,我想删除它,因为我认为这是安全隐患,因此我执行以下操作:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

但它仍显示USAGE授予在授予列表中。

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

有什么想法吗?我究竟做错了什么?

Answers:


20

在幕后,当您看到仅具有USAGE的用户时,该用户将被写入mysql.user表中,并且所有全局特权均已关闭。

您最初声明用户具有以下功能:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

您应该会看到mysql.user带有MD5密码的行,并且所有globals privs都设置为N。您还应该在mysql.db中看到一行

  • user ='cptnotsoawesome'
  • host ='localhost'
  • db ='statistics'
  • 所有数据库级别特权都设置为“ Y”

您应该可以通过此查询看到它们

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

运行REVOKE命令时,只需从中删除该行mysql.db。这没有触及中的行mysql.user。因此,您仍然可以登录到mysql,并且只有privs可以运行

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

如果有一个称为的测试数据库test或前5个字符为的数据库test_(请使用来查找SELECT * FROM mysql.db WHERE db LIKE 'test%';),则只有USAGE的用户可以拥有对测试数据库的完整权限。我在2011年9月的ServerFault中撰写了有关此内容的文章

如果要从mysql.user中删除该行,则可以运行

DROP USER cptnotsoawesome@localhost;

要么

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;

9

使用 表示用户没有任何特权。

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

您实际上不能在不删除用户的情况下撤消USAGE。USAGE是全局级别的特权。

看看这个链接


我会做,如果是做错了什么数据库,一样,如果它是安全威胁或类似的东西,否则-我可能只是离开它
Katafalkas

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.