繁体   English   中英

在不再存在的表上撤消MySQL权限

[英]Revoke MySQL Privileges on no longer existing Table

我创建了一个具有表级权限的mysql用户。

一段时间后删除此表,但mysql.table_priv中的权限仍然存在。

有没有办法(可能是StoredProcedure)删除mysql.table priv中引用不存在的表的所有条目?

这是一种重现它的方法:

CREATE DATABASE test;
USE test;
CREATE TABLE test (Col1 INT(10));
GRANT SELECT ON test.test TO test@'%' IDENTIFIED BY 'test';
DROP TABLE test;


SELECT * FROM mysql.tables_priv WHERE user = 'test'; # 1 row

问候安德烈

您可以使用以下查询来查找不再存在的表上的用户的所有权限:

SELECT tables_priv.* FROM mysql.tables_priv 
 LEFT JOIN information_schema.tables ON (db=table_schema AND tables_priv.table_name=tables.table_name) 
WHERE tables.table_schema IS NULL;

之后,您可以使用DELETE删除权限:

DELETE mysql.tables_priv FROM mysql.tables_priv 
 LEFT JOIN information_schema.tables 
  ON (db=table_schema AND tables_priv.table_name=tables.table_name) 
 WHERE tables.table_schema IS NULL;
FLUSH PRIVILEGES;

我希望我不必这么说,但要特别小心使用。

如果用户也可以删除,您可以使用

DROP USER测试

如果这不是一个选项,我认为你需要自己从mysql.tables_priv删除相应的mysql.tables_priv 您需要正确的权限才能执行此操作。 并且不要忘记在更改后刷新权限。

DELETE FROM mysql.tables_priv 
WHERE Table_name LIKE "test" 
  AND User Like "test" 
  AND Host LIKE "%"
  AND Table_priv LIKE "Select";

FLUSH PRIVILEGES;

或者,您可以使用REVOKE命令:

REVOKE
  priv_type [(column_list)]
  [, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...

那张桌子要小心!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM