【问题标题】:Is it possible to encapsulate a table in MySql是否可以在MySql中封装一个表
【发布时间】:2012-09-04 15:15:52
【问题描述】:

我是数据库新手。我希望数据库中的更新仅通过存储过程发生。最终用户没有拥有GRANT UPDATE,但拥有GRANT EXECUTE ON PROCEDURE

我尝试过这种方式,但发现最终用户需要拥有UPDATE 权限。有没有其他方法可以实现?

【问题讨论】:

  • 只要(a)你的程序的DEFINER有更新权限,(b)程序有SQL SECURITY DEFINER和(c)调用程序的用户有EXECUTE,你的重新尝试做应该工作。请参阅下面的@AlainCollins。

标签: mysql permissions grant


【解决方案1】:

根据the doc

任何对 p1 具有 EXECUTE 权限的用户都可以使用 CALL 语句调用它。但是,当 p1 执行时,它是在 DEFINER 安全上下文中执行的,因此以 'admin'@'localhost' 的权限执行,该帐户在 DEFINER 属性中命名。此帐户必须具有 p1 的 EXECUTE 权限以及表 t1 的 UPDATE 权限。否则,程序将失败。

因此您应该能够将 DEFINER 设置为授权用户帐户,并且只授予您的最终用户执行该过程的能力。

【讨论】:

  • 因此实现此模型的常用方法是使用高权限帐户来创建您的程序,该程序会自动将DEFINER 设置为该用户。请注意,还有 SQL SECURITY 特性,但它默认为 DEFINER,这是您想要的。这是question about changing the definer
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多