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

时间:2015-07-17 07:23:46

标签: mysql permissions

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

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

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

这是一种重现它的方法:

list

问候 安德烈

2 个答案:

答案 0 :(得分:0)

如果还可以删除用户,则可以使用

DROP USER test

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

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] ...

在那张桌子上小心!

答案 1 :(得分:0)

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

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;

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