MariaDB 给指定列值自动加密(持久数据加触发器)

文章目录

参考链接:

一篇非常好的讲解触发器的文章:示例、原理MySQL/MariaDB触发器

用触发器自动加密的应用文章mysql触发器-插入更新数据时字段值自动加密

delimiter的作用可以参考这里

代码

插入时,自动加密

sql 复制代码
-- 删除原先的触发器
DROP TRIGGER IF EXISTS 【触发器名,如t_insert_tbStu_oValue】; 	
-- 创建触发器
DELIMITER $$
CREATE TRIGGER 【触发器名,如t_insert_tbStu_oValue】 		
BEFORE INSERT ON 【表名】FOR EACH ROW -- 触发在这张表新增数据前
BEGIN  -- 要执行的sql list 开始
        IF new.【列名】 IS NOT NULL THEN
        SET new.【列名】 = to_base64(aes_encrypt(new.【列名】,"【你的密码】"));
        END IF;
END;
END; $$
DELIMITER ;

在MySQL/MariaDB中,

new 表 : 表示向表中插入新记录之前,新记录保存在new表中,即inserted表。

对应的,old表 表示删除目标记录之后将删除的记录保存在old表中,即deleted表。

update操作 基本可以认为是先delete再insert的行为,所以也会触发这两张表。

sql中可以引用这两张表中的列,例如引用old.col_name

另外:

DELIMITER 默认是;,但是可以指定成其他的,例如由$$字代替,这样,在指定时DELIMITER $$和再次出现表示语句结束的$$之间,就可以出现;(不作为分隔符,但是可以作为嵌套的语句的结束),并且作为整体的一部分来执行。

更新时,自动加密

使用update语句时,插入的值,会是加密后的数据。

sql 复制代码
DROP TRIGGER IF EXISTS 【触发器名,如t_update_tbStu_oValue】;
DELIMITER $$
CREATE TRIGGER 【触发器名,如t_update_tbStu_oValue】 	-- 创建触发器
BEFORE UPDATE ON 【表名】 FOR EACH ROW
BEGIN  -- 要执行的sql list 开始
        IF new.【列名】IS NOT NULL   THEN
        SET new.【列名】= TO_BASE64 (AES_ENCRYPT (new.【列名】,'【你的密码】'));
        END IF;
END;$$
DELIMITER ;

查看触发器

sql 复制代码
SHOW TRIGGERS;

数据操作示例

update数据
bash 复制代码
USE 【数据库名】;
SHOW TRIGGERS;
SELECT * FROM 【表名】LIMIT 10;
update 【表名】 SET oValue = 2 
	WHERE oName = "【筛选条件】";
SELECT * FROM 【表名】 LIMIT 10;
取出

直接取

sql 复制代码
SELECT oValue 
	FROM 【表名】
	WHERE oName = "【筛选条件】";
解密取
sql 复制代码
SELECT AES_DECRYPT(FROM_BASE64(oValue), '【你的密码】') 
	FROM 
	(SELECT oValue
	FROM 【表名】
	WHERE oName = "【筛选条件】") 
	as oValue;

注意

一次尝试,看加密后数据长度

sql 复制代码
-- 判断数据长度 
-- 源数据 120位
SELECT TO_BASE64(AES_ENCRYPT('yML93Cb2ZYnwrRUSyc+5ETicNwfbpVRKe03XGlSXHOKvA3lMWnHCof8wFnsaYwVWMvBl6YssUbQt/MngjFUbSW709eFr1nsOcSSZy9wn61nDvZN5qm1mypDN','【我的密码】'));

-- 结果 172位
'oGxxBBxQVjN2CoVxiZ08dX3BLb9xCEFwQqEk4eZJjwVtuGHKYjyfsy+fBp66euJMwts8Fzv0rnQSisrdCopKS1HSx5YUmRUsEsZubPp7BepIqjwVEtU9uCCJXetFlhIcjyapt+clGVZx4gici4B6jPsKP2DB3C1nYq9FsJBS1Ts='
相关推荐
白云偷星子10 分钟前
MySQL笔记11
数据库·笔记·mysql
稚辉君.MCA_P8_Java1 小时前
WebSocket 是什么原理?为什么可以实现持久连接?
网络·数据库·websocket·网络协议
小光学长1 小时前
基于Vue的图书馆座位预约系统6emrqhc8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
code小毛孩2 小时前
如何简单的并且又能大幅度降低任务队列的锁粒度、提高吞吐量?
java·jvm·数据库
风随心飞飞2 小时前
linux 环境下mysql 数据库自动备份和清库 通过crontab 创建定时任务实现mysql数据库备份
linux·数据库·mysql
奥尔特星云大使2 小时前
读写分离中间件简介
数据库·mysql·中间件·读写分离
友莘居士3 小时前
高效处理 Excel 海量数据入库:编程脚本、CSV 中间件、图形工具优化全攻略
数据库·中间件·excel·csv·海量数据·入库
Han.miracle4 小时前
数据库圣经第二章——简单的my.ini基础配置介绍
数据库
八怪4 小时前
KILL MTS的一个worker线程会怎么样
数据库
-Xie-5 小时前
Mysql杂志(三十一)——Join连接算法与子查询、排序优化
数据库·mysql