无法删除“GRANT USAGE”

Kat*_*kas 15 mysql permissions

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

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';
Run Code Online (Sandbox Code Playgroud)

所以现在当我做

show grants for cptnotsoawesome@localhost;
Run Code Online (Sandbox Code Playgroud)

我可以看到其中之一是:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 
Run Code Online (Sandbox Code Playgroud)

现在我想删除它,因为我认为它存在安全隐患,所以我这样做:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

但它仍然显示授权列表中的USAGE grant。

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 
Run Code Online (Sandbox Code Playgroud)

任何想法为什么?我究竟做错了什么?

Rol*_*DBA 20

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

您最初表示用户有这个:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 
Run Code Online (Sandbox Code Playgroud)

您应该看到一行mysql.userMD5 密码和所有全局权限设置为N. 您还应该在 mysql.db 中看到一行

  • 用户='cptnotsoawesome'
  • 主机='本地主机'
  • db='统计'
  • 所有数据库级别权限设置为“Y”

您应该能够通过此查询看到它们

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G
Run Code Online (Sandbox Code Playgroud)

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

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;
Run Code Online (Sandbox Code Playgroud)

如果有一个名为的测试数据库test或一个数据库的前 5 个字符是test_,(使用 查找它SELECT * FROM mysql.db WHERE db LIKE 'test%';)那么只有 USAGE 的用户可以拥有测试数据库的完全权限。我在 ServerFault Sep 2011 中写了这个

如果您想从 mysql.user 中删除该行,您可以运行

DROP USER cptnotsoawesome@localhost;
Run Code Online (Sandbox Code Playgroud)

或者

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)


Abd*_*naf 11

USAGE 表示用户没有任何权限。

You have to use 'DROP USER'. 
Run Code Online (Sandbox Code Playgroud)

drop user cptnotsoawesome@localhost;

在不删除用户的情况下,您实际上无法撤销 USAGE。USAGE 是全局级别的权限。

看看这个链接