说,我有一个复杂的MySQL过程。该过程基本上是一个复杂的SELECT
查询,该查询使用表中的数据输出一些记录。
为了方便起见,该过程需要写入临时表以计算最终结果。
因此,我可以适当地授予权限,以便尽管该过程实际上需要写入数据库,但只能读取数据库的用户可以调用此过程以获取其输出吗?因为本质上该过程不打算编写,所以它只是将一些数据缓存到特定表中,其名称以下划线开头,因此除了花费磁盘存储成本之外,它不应严重破坏任何内容。
最佳答案
在定义者安全上下文中执行的存储程序或视图将使用其DEFINER
属性命名的帐户的特权执行。这些特权可能与调用用户的特权完全不同。
https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
只要定义该过程的用户具有必要的权限,并且没有明确强制该过程在INVOKER
上下文中运行,那么调用用户的权限对该过程可以执行的操作没有影响。定义用户的权限适用于过程的操作。
调用用户仅需要能够运行它。不需要特殊的安排,因为这是默认行为。DEFINER
默认为创建过程的用户。如果该帐户具有SUPER
特权,则他们实际上可以声明将应用其特权的其他定义者帐户。