我创建了一个具有表级权限的mysql用户。
此表在一段时间后被删除,但mysql.table_priv中的权限仍然存在。
是否有办法(可能是StoredProcedure)删除mysql.table priv中引用不存在的表的所有条目?
这是一种重现它的方法:
list
问候 安德烈
答案 0 :(得分:0)
如果还可以删除用户,则可以使用
如果这不是一个选项,我认为您需要自己从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;
我希望我不必这么说,但要特别小心。