在MySQL中,执行触发器需要什么特权?

时间:2013-11-06 15:18:10

标签: mysql triggers

我在MySQL手册中发现DEFINER的解释令人困惑,因此我不确定应用程序运行所在的“执行用户”需要什么特权。为了安全起见,我喜欢将“执行用户”限制为所需的最少权限。

我理解触发器/存储过程的创建者需要SUPER权限,但“执行用户”是否也需要SUPER权限?

我在用户下创建了一个触发器,最终失去了对我的数据库的权限。 “执行用户”没有SUPER权限和触发失败的MySQL UPDATE。

我给'执行用户'提供了SUPER权限,我通过删除和创建触发器将DEFINER更改为root,这一切都有效。我是否必须为'执行用户'提供SUPER权限,还是我必须确保DEFINER用户仍在使用且具有超级权限?

针对MySQL的TRIGGERS和STORED PROCEDURES用户管理的最佳做法是什么?

1 个答案:

答案 0 :(得分:4)

区分存储的例程和触发器有一些特殊性。在这里,我将尝试帮助解决触发器问题。

我希望以下摘要有用。

首先要确定您正在使用的MySQL版本。

根据文件:

MySQL 5.0:13.1.11. CREATE TRIGGER Syntax

  

从MySQL 5.0.17开始,MySQL将DEFINER用户考虑在内   检查触发器权限如下:

     
      
  • 在CREATE TRIGGER时间,发出声明的用户必须具有SUPER权限。

  •   
  • 在触发器激活时,将根据DEFINER用户检查权限。该用户必须具有以下权限:

         
        
    • SUPER特权。

    •   
    • 如果使用触发器主体中的OLD.col_name或NEW.col_name对表列进行引用,则为主题表的SELECT权限。

    •   
    • 如果表格列是SET NEW.col_name =触发器正文中的值分配的目标,则主题表的UPDATE权限。

    •   
    • 触发器执行的语句通常需要其他任何权限。

    •   
  •   
     

在MySQL 5.0.17之前,DEFINER不可用,MySQL检查触发器   这样的特权:

     
      
  • 在CREATE TRIGGER时间,发出声明的用户必须具有SUPER权限。

  •   
  • 在触发器激活时,将针对其操作导致触发器被激活的用户检查权限。这个用户必须拥有   通常执行语句所需的任何权限   通过触发器。

  •   

MySQL 5.1及以上版本:13.1.19. CREATE TRIGGER Syntax

  

MySQL在检查触发器时会考虑DEFINER用户   特权如下:

     
      
  • 在CREATE TRIGGER时间,发出声明的用户必须具有TRIGGER权限。 (在MySQL 5.1.6之前的SUPER。)

  •   
  • 在触发器激活时,将根据DEFINER用户检查权限。该用户必须具有以下权限:

         
        
    • TRIGGER特权。 (在MySQL 5.1.6之前的SUPER。)

    •   
    • 如果使用触发器主体中的OLD.col_name或NEW.col_name对表列进行引用,则为主题表的SELECT权限。

    •   
    • 如果表格列是SET NEW.col_name =触发器正文中的值分配的目标,则主题表的UPDATE权限。

    •   
    • 触发器执行的语句通常需要其他任何权限。

    •   
  •