当前位置: 首页 > news >正文

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

文章目录

    • 代码
      • 插入时,自动加密
      • 更新时,自动加密
      • 查看触发器
      • 数据操作示例
        • update数据
        • 取出
        • 解密取
    • 注意
      • 一次尝试,看加密后数据长度

参考链接:
一篇非常好的讲解触发器的文章:示例、原理MySQL/MariaDB触发器。
用触发器自动加密的应用文章mysql触发器-插入更新数据时字段值自动加密。
delimiter的作用可以参考这里。

代码

插入时,自动加密

-- 删除原先的触发器
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 THENSET 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语句时,插入的值,会是加密后的数据。

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   THENSET new.【列名】= TO_BASE64 (AES_ENCRYPT (new.【列名】,'【你的密码】'));END IF;
END;$$
DELIMITER ;

查看触发器

SHOW TRIGGERS;

数据操作示例

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

在这里插入图片描述

取出

直接取

SELECT oValue FROM 【表名】WHERE oName = "【筛选条件】";

在这里插入图片描述

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

在这里插入图片描述

注意

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

-- 判断数据长度 
-- 源数据 120位
SELECT TO_BASE64(AES_ENCRYPT('yML93Cb2ZYnwrRUSyc+5ETicNwfbpVRKe03XGlSXHOKvA3lMWnHCof8wFnsaYwVWMvBl6YssUbQt/MngjFUbSW709eFr1nsOcSSZy9wn61nDvZN5qm1mypDN','【我的密码】'));-- 结果 172位
'oGxxBBxQVjN2CoVxiZ08dX3BLb9xCEFwQqEk4eZJjwVtuGHKYjyfsy+fBp66euJMwts8Fzv0rnQSisrdCopKS1HSx5YUmRUsEsZubPp7BepIqjwVEtU9uCCJXetFlhIcjyapt+clGVZx4gici4B6jPsKP2DB3C1nYq9FsJBS1Ts='
http://www.lryc.cn/news/352166.html

相关文章:

  • 深入理解Linux系统管理与网络配置高级指南
  • 朴素贝叶斯+SMSSpamCollections
  • 【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
  • 深度神经网络详解
  • MYSQL 数据迁移利器 MYSQLSH
  • 【MYSQL】分数排名
  • 【论文笔记】| 蛋白质大模型ProLLaMA
  • MySQL笔记第一天(从小白到入门)
  • 初识Qt:从Hello world到对象树的深度解析
  • 多维数据库创建
  • win11安装docker运行Open-Webui 界面化展示 ollama大模型
  • 网络模型-PoE技术
  • 网站策划是什么
  • MySQL基础学习: SET FOREIGN_KEY_CHECKS = 0
  • 信号:MSK调制和GMSK调制
  • 计算请假申请时长
  • linux-配置服务器之间 ssh免密登录
  • Java入门基础学习笔记47——ArrayList
  • 案例题(第二版)
  • 基于python向量机算法的数据分析与预测
  • 传输层 --- UDP
  • 图书管理系统(Java版本)
  • 全同态加密生态项目盘点:FHE技术的崛起以及应用
  • 山脉数组的峰顶索引 ---- 二分查找
  • 【简单介绍下7-Zip,什么是7-Zip?】
  • SCSS基本使用:构建高效、可维护的CSS架构
  • allegro 无法删除Xnet
  • 2024年甘肃特岗教师招聘报名流程,速速查收哦!
  • 【错误解决】使用HuggingFaceInstructEmbeddings时的一个错误
  • C++中的四种类型转换运算符