【发布时间】:2020-04-17 00:57:42
【问题描述】:
我有一个 MySQL 表,需要 INSERT 的受限权限。
具体来说,我写了一个存储函数来处理所有INSERT 操作,我需要限制权限,所以只有这个存储函数可以插入行这个特定的表。
“但你为什么要这么做?”
因为 MySQL 不支持 Microsoft 的 INSTEAD OF INSERT 触发器,并且用于插入的自定义存储函数/过程是唯一可行的解决方法。
我需要它像触发器一样工作 - 保证为每个INSERT 操作执行,没有例外或漏洞。
如果没有错误,该函数返回 0,如果参数无效,则返回 1,如果唯一索引冲突,则返回 2,等等。
(或者函数可能会包含一个INSERT ... ON DUPLICATE KEY UPDATE 声明,我还没有决定。)
“但为什么需要 INSTEAD OF INSERT 触发器?”
与 Microsoft SQL Server 开发人员需要它的原因相同......因为它完成了需要完成的工作......
具体来说,因为我的代码包括GET_LOCK before 插入和RELEASE_LOCK after 插入......而且我不希望BEFORE INSERT 触发器在不释放的情况下结束锁(似乎是个非常糟糕的主意)。
【问题讨论】:
-
各种 SQL 实现以不同的方式处理事务。如果您描述您的需求而不是简单地参考 SQL Server 的事务语义,我们可能会更好地帮助您。请edit您的问题。
标签: mysql sql triggers permissions