我有一个场景,我需要一个数据库的只读用户。这个用户可以读取表,就像查看任何东西一样。然而,在执行下面的命令。
GRANT EXECUTE
ON `randomdatabase`.*
TO [email protected];
我能够读取任何表或视图。但是当涉及到UDF和存储过程时,我无法执行它们。但如果我授予 execute
权限的用户,我可以执行UDF和过程,甚至是那些有插入到表中的代码。因此,这与作为一个只读用户是矛盾的。有什么方法可以防止执行特定的UDF和可以插入到表的过程?
当你授予 EXECUTE
权限,用户获得的是执行权限。这些权限并不检查例程的内容行为是什么。这使得你可以允许用户修改数据库的内容,但只能通过在例程中定义的一组规则。
如果你只需要授予只读权限,那么你需要排除那些添加删除更新数据库的例程。
这种行为并不是MySQL所特有的,但所有其他数据库的工作方式都是一样的。