在MySQL中,执行触发器需要什么特权?
我发现MySQL手册中对DEFINER的解释令人困惑,因此我不确定应用程序运行时“执行用户”需要什么权限。为了安全起见,我喜欢将“执行用户”限制为所需的最小权限 我知道触发器/存储过程的创建者需要超级权限,但“执行用户”是否也需要超级权限 我在一个最终失去数据库特权的用户下创建了一个触发器。“执行用户”没有超级权限,MySQL更新触发失败 我给了“执行用户”超级权限,通过删除和创建触发器,我将定义者改为root,一切正常。我是否必须向“执行用户”授予超级权限,或者我必须确保定义用户仍然存在并且拥有超级权限在MySQL中,执行触发器需要什么特权?,mysql,triggers,Mysql,Triggers,我发现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.1.6之前的超级版本。)
- 在触发激活时,将根据定义者用户检查权限。此用户必须具有以下权限:
- 触发特权。(MySQL 5.1.6之前的超级版本。)
- 如果在触发器主体中使用OLD.col_name或NEW.col_name引用表列,则为主题表提供选择权限
- 如果表列是触发器正文中SET NEW.col_name=值赋值的目标,则主题表的更新权限
- 触发器执行的语句通常需要的任何其他特权
谢谢,所以使用一个永远存在的定义是有意义的。因此,我要么为多数据库服务器中的每个数据库使用不同的定义者,要么始终使用“root”作为定义者。我认为使用“root”会降低应用程序失败的风险,因为定义者会消失。@sdfor,触发器总是有一个
DEFINER
,并在该上下文中运行,为了安全起见,建议使用用户root
定义触发器,以提供超出其需要的权限,使用具有所需最低权限的用户定义触发器。