概述触发器可在写操作发生时记录审计信息,包括旧值、新值与操作者。通过审计表与统一触发函数,在不影响主业务的前提下实现可追溯与合规。关键实践与参数审计范围: INSERT/UPDATE/DELETE全面覆盖字段记录: `op` `old` `new` `actor` `ts`事务一致: 审计与主写入同事务提交压力控制: 审计表归档与分区以控制体量示例/配置/实现CREATE TABLE orders ( id BIGSERIAL PRIMARY KEY, amount NUMERIC(12,2) NOT NULL, status TEXT NOT NULL, updated_by TEXT ); CREATE TABLE orders_audit ( id BIGSERIAL PRIMARY KEY, order_id BIGINT NOT NULL, op TEXT NOT NULL, old JSONB, new JSONB, actor TEXT, ts TIMESTAMPTZ DEFAULT now() ); CREATE OR REPLACE FUNCTION fn_orders_audit() RETURNS trigger AS $$ BEGIN IF (TG_OP = 'INSERT') THEN INSERT INTO orders_audit(order_id, op, old, new, actor) VALUES (NEW.id, 'INSERT', NULL, to_jsonb(NEW), NEW.updated_by); RETURN NEW; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO orders_audit(order_id, op, old, new, actor) VALUES (NEW.id, 'UPDATE', to_jsonb(OLD), to_jsonb(NEW), NEW.updated_by); RETURN NEW; ELSIF (TG_OP = 'DELETE') THEN INSERT INTO orders_audit(order_id, op, old, new, actor) VALUES (OLD.id, 'DELETE', to_jsonb(OLD), NULL, OLD.updated_by); RETURN OLD; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_orders_audit AFTER INSERT OR UPDATE OR DELETE ON orders FOR EACH ROW EXECUTE FUNCTION fn_orders_audit(); 验证全量覆盖: 对三类操作均产生审计记录一致性: 审计与主数据在同事务内写入,无漏记可追溯: 审计表包含操作者与时间,查询可检索体量控制: 分区与归档策略有效,查询性能稳定注意事项审计表增长需归档与分区在高写入场景评估性能影响注意敏感字段的脱敏与访问控制结合应用层记录来源IP与请求ID

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部