Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,执行触发器需要什么特权?_Mysql_Triggers - Fatal编程技术网

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

在MySQL中,执行触发器需要什么特权?,mysql,triggers,Mysql,Triggers,我发现MySQL手册中对DEFINER的解释令人困惑,因此我不确定应用程序运行时“执行用户”需要什么权限。为了安全起见,我喜欢将“执行用户”限制为所需的最小权限 我知道触发器/存储过程的创建者需要超级权限,但“执行用户”是否也需要超级权限 我在一个最终失去数据库特权的用户下创建了一个触发器。“执行用户”没有超级权限,MySQL更新触发失败 我给了“执行用户”超级权限,通过删除和创建触发器,我将定义者改为root,一切正常。我是否必须向“执行用户”授予超级权限,或者我必须确保定义用户仍然存在并且拥

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

我知道触发器/存储过程的创建者需要超级权限,但“执行用户”是否也需要超级权限

我在一个最终失去数据库特权的用户下创建了一个触发器。“执行用户”没有超级权限,MySQL更新触发失败

我给了“执行用户”超级权限,通过删除和创建触发器,我将定义者改为root,一切正常。我是否必须向“执行用户”授予超级权限,或者我必须确保定义用户仍然存在并且拥有超级权限


使用MySQL的触发器和存储过程进行用户管理的最佳实践是什么

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

我希望下面的总结是有帮助的

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

根据文件:

MySQL 5.0:

从MySQL 5.0.17开始,MySQL在 按如下方式检查触发器权限:

  • 在创建触发器时,发出语句的用户必须具有超级权限

  • 在触发激活时,将根据定义者用户检查权限。此用户必须具有以下权限:

    • 超级特权

    • 如果在触发器主体中使用OLD.col_name或NEW.col_name引用表列,则为主题表提供选择权限

    • 如果表列是触发器正文中SET NEW.col_name=值赋值的目标,则主题表的更新权限

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

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

  • 在创建触发器时,发出语句的用户必须具有超级权限

  • 在触发器激活时,将针对其操作导致触发器激活的用户检查权限。此用户必须具有 执行语句通常需要的任何特权 按动扳机

MySQL 5.1及以上版本:

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

  • 在创建触发器时,发出语句的用户必须具有触发器权限。(MySQL 5.1.6之前的超级版本。)

  • 在触发激活时,将根据定义者用户检查权限。此用户必须具有以下权限:

    • 触发特权。(MySQL 5.1.6之前的超级版本。)

    • 如果在触发器主体中使用OLD.col_name或NEW.col_name引用表列,则为主题表提供选择权限

    • 如果表列是触发器正文中SET NEW.col_name=值赋值的目标,则主题表的更新权限

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


谢谢,所以使用一个永远存在的定义是有意义的。因此,我要么为多数据库服务器中的每个数据库使用不同的定义者,要么始终使用“root”作为定义者。我认为使用“root”会降低应用程序失败的风险,因为定义者会消失。@sdfor,触发器总是有一个
DEFINER
,并在该上下文中运行,为了安全起见,建议使用用户
root
定义触发器,以提供超出其需要的权限,使用具有所需最低权限的用户定义触发器。