[英]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;
我希望我不必这么说,但要特别小心使用。
如果用户也可以删除,您可以使用
如果这不是一个选项,我认为你需要自己从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.