我是数据库新手。我希望数据库中的更新只能通过存储过程进行。最终用户不拥有GRANT UPDATE
,但拥有GRANT EXECUTE ON PROCEDURE
。
我尝试了这种方式,但发现最终用户需要获得UPDATE
权限。有没有其他方法可以实现这一目标?
答案 0 :(得分:2)
根据the doc:
对p1具有EXECUTE特权的任何用户都可以使用CALL语句调用它。但是,当p1执行时,它会在DEFINER安全上下文中执行,因此以“admin”@“localhost”(DEFINER属性中指定的帐户)的权限执行。此帐户必须具有p1的EXECUTE特权以及表t1的UPDATE特权。否则,程序失败。
因此,您应该能够将DEFINER设置为授权用户帐户,并且只允许最终用户执行该过程。