我明白为什么这个被封锁了。如果我是MySQL,我也不希望人们(很容易)在关键业务/内部使用数据库上一意孤行。然而,它应该支持合法的用例。
假设我有一个存储过程:
delimiter //
CREATE DEFINER=CURRENT_USER() PROCEDURE performance_schema.sp_flush_hosts()
BEGIN
-- requires DROP privileges
TRUNCATE TABLE performance_schema.host_cache;
END
//
delimiter ;对于在大多数数据库上具有ALL权限的名为ALL的用户。在实践中,MySQL似乎是明令禁止 for performance_schema
由于只有有限的一组特权适用于Performance表,因此尝试使用GRANT ALL作为在数据库或表leval上授予特权的速记,但出错:
很好。因此,让我们授予一些特定的权限:
mysql> GRANT CREATE ROUTINE on perforamnce_schema.host_cache to 'root'@'%';
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used在同一文档(上面)中,只有: SELECT、UPDATE、DROP被单独列出,但它没有说明这些是否是唯一可用的权限。如何授予创建此例程的权限?这可能吗?谢谢。
从这个答案中得到的启示:是否有一种在MySQL中有效地授予截断或删除表的方法?
发布于 2022-01-08 18:40:08
也许:
CREATE声明它--参见SQL SECURITY DEFINER https://dev.mysql.com/doc/refman/5.6/en/stored-objects-security.html#stored-objects-security-sql-security --这提供了一种只为SP的运行提升权限的方法。通常,人们会使用SQL SECURITY INVOKERhttps://stackoverflow.com/questions/70628848
复制相似问题