我的用例是我有一个 MYSQL 表,它后面有一个更改跟踪表。两个表都是InnoDB。
我想使用触发器来强制执行两件事。
一个:在每次更新时强制复制先前的状态(更新触发器执行插入选择查询)这并不简单,我已经做到了。
两个:将对第二个表的访问权限限制为只读,而触发器仍然可以根据需要插入/更新/删除
最佳答案
对用户访问和触发器的进一步研究发现了这一点:
Mysql 5.5 reference manual: 19.6 Access Control for Stored Programs and Views
事实证明,存储的程序可以分配一个用户来运行。触发器是存储的程序。通过将插入、更新和删除限制为仅由触发器使用的特殊用户,并使用触发器(或任何存储程序)的 DEFINER 属性,我可以使我想要访问的触发器在该用户下运行。
关于Mysql 限制插入/更新/删除从触发器调用(而不是从应用程序代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165654/