[MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计

一个简单的例子:

delimiter |
create trigger before_insert_a before insert on a
for each row 
begin
if USER() != 'root@localhost' then
 insert into log values(user());
end if;
end; |

这里不能用 current_user() 代替 user(),因为 current_user() 取得的是创建该trigger的账户。
上面只是个简单的例子,可以通过查询mysql.user, mysql.db 等表来做更详细的权限验证判断。
需要注意的是:启用触发器后会带来系统性能上的下降,需要有个权衡。

技术相关:

评论

触发器到确实是个很方便的工具,尤其是来进行数据验证和补充的时候 oracle的时候用的特爽
但是mysql没实际运用经验 还需要仔细琢磨一下
尤其是性能和一致性上

我用触发器实现2个表的简单同步,目前还没出现一致性/稳定性方面的问题;性能方面影响也不是太大,不过这个取决于要更新的数据量大小。

MySQL方案、培训、支持
MySQL 用户组

" before insert on a "
是指表a吗?
那如果不insert表a呢?能记录吗?

欢迎测试一下再来回复自己的帖子 :)

MySQL方案、培训、支持