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

news2024/10/6 10:27:00

文章目录

    • 代码
      • 插入时,自动加密
      • 更新时,自动加密
      • 查看触发器
      • 数据操作示例
        • 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 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语句时,插入的值,会是加密后的数据。

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 ;

查看触发器

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 oValue
	FROM 【表名】
	WHERE oName = "【筛选条件】") 
	as oValue;

在这里插入图片描述

注意

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

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

-- 结果 172位
'oGxxBBxQVjN2CoVxiZ08dX3BLb9xCEFwQqEk4eZJjwVtuGHKYjyfsy+fBp66euJMwts8Fzv0rnQSisrdCopKS1HSx5YUmRUsEsZubPp7BepIqjwVEtU9uCCJXetFlhIcjyapt+clGVZx4gici4B6jPsKP2DB3C1nYq9FsJBS1Ts='

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1689121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Virtuoso IC5141 实验六 全差动运算放大器设计

一、实验目的 1.学习设计二极管连接的MOS做负载的放大器,根据仿真现象使用理论对其分析。 2.学习设计全差动电流源作负载的差动放大器,根据仿真现象使用理论对其分析。 3.学习设计共源共栅全差动放大器,根据仿真现象使用理论对其分析。 4…

保护元件-详实的熔断器(保险丝)知识

目录: 一、汽车保险丝设计与选型 1、概述 2、构造及工作原理 1)构造 2)工作原理 3)保险丝熔断及分断时间 4)时间/电流特性曲线 5)环境温度修正系数 3、熔化热能值I2t★ 4、三种电流模型 1&a…

BioMistral 7B——医疗领域的新方法,专为医疗领域设计的大规模语言模型

1. 概述 自然语言处理领域正在以惊人的速度发展,ChatGPT 和 Vicuna 等大型语言模型正在从根本上改变我们与计算机交互的方式。从简单的文本理解到复杂的问题解决,这些先进的模型展示了类似人类的推理能力。 特别是,BLOOM 和 LLaMA 等开源模…

html多节点生成图片并导出zip包

html多节点生成图片并导出zip包 背景 在做项目时遇到一个要将html节点展示的图片列表统一导出为zip包的需求。 难点 将html节点生成图片将多张图片加入zip包中,然后下载 解决html生成图片问题 参考html截图的思路使用 pnpm add html-to-image如何将图片资源生成z…

python:__class_getitem__使用以及cached_property源码分析

python:__class_getitem__使用以及cached_property源码分析 1 前言 Python中如何模拟泛型类型? 当使用类型标注时,使用 Python 的方括号标记来形参化一个 generic type 往往会很有用处。 例如,list[int] 这样的标注可以被用来表…

【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON 在进入编辑之前,我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。 首先,编辑 index.html​ 以便向地图添加深色背景&#xf…

开源RAG,本地mac启动 dify源码服务

一、Dify文档 参考官方文档来操作,基本没太大的问题。一些细节,我在本篇文章中补充了出来。 这篇文章主要讲以源码的方式启动后端服务,前端服务使用容器启动。 dify 文档地址 欢迎使用 Dify | 中文 | Dify Dify 本地源码部署文档&#xff…

Redis系统架构中各个处理模块是干什么的?no.19

Redis 系统架构 通过前面的学习,相信你已经掌握了 Redis 的原理、数据类型及访问协议等内容。本课时,我将进一步分析 Redis 的系统架构,重点讲解 Redis 系统架构的事件处理机制、数据管理、功能扩展、系统扩展等内容。 事件处理机制 Redis…

Linxu 系统中 修改 docker 镜像存放目录 修改docker默认路径。亲测有效。

1、关闭docker 服务 systemctl stop docker 2、创建新的存放路径(-p 父级目录不存在一起创建) mkdir /home/service/docker -p 3、移动默认路径中的镜像文件到新目录 mv /var/lib/docker/* /home/service/docker/ 4、修改docker.service 将新的路…

实操专区-第14周-课堂练习专区-饼图和圆环图、玫瑰图

实操专区-第14周-课堂练习专区-饼图和圆环图、玫瑰图 下载安装ECharts,完成如下样式图形。 代码和截图上传 基本要求:下图3选1,完成代码和截图 完成 3.1.3.13 饼图和圆环图、玫瑰图 中的任务点 基本要求:3个选一个完成&#xff0c…

全网最简洁Java实现多线程安全的令牌桶限流算法

在许多应用中,我们需要限制某些操作的频率,例如,限制API调用的速率,防止系统被过度使用,这种需求就需要一个限流算法来满足 令牌桶算法是一种常用的限流算法 它的基本思想是:系统以恒定的速率向桶中添加令…

Isaac Sim仿真平台学习(1)认识Isaac Sim

0.前言 上一个教程中我们下载好了Isaac Sim,这一章我们将来简单了解一下Isaac Sim平台。 isaac Sim仿真平台安装-CSDN博客 1.Isaac Sim是啥? What Is Isaac Sim? — Omniverse IsaacSim latest documentation Isaac Sim是NVDIA Omniverse平台的机器…

基础3 探索JAVA图形编程桌面:逻辑图形组件实现

在一个宽敞明亮的培训教室里,阳光透过窗户柔和地洒在地上,教室里摆放着整齐的桌椅。卧龙站在讲台上,面带微笑,手里拿着激光笔,他的眼神中充满了热情和期待。他的声音清晰而洪亮,传遍了整个教室:…

深度学习-Softmax回归+损失函数+图像分类数据集

目录 Softmax回归回归 VS 分类Kaggle上的分类问题 从回归到多类分类回归分类从回归到多类分类-均方损失从回归到多类分类-无校验比例从回归到多类分类-校验比例 Softmax和交叉熵损失总结损失函数均方损失绝对值损失函数鲁棒损失 图像分类数据集通过框架中内置函数将FashionMNIS…

前端请求超时截断,axios timeout设置未生效情况记录

问题描述 前端请求超时截断,axios timeout设置未生效情况记录 timeout设置方式: 表现(前端超过5min报错500,直接访问接口超过5min能够正常响应): 问题原因 上面的配置设置时间为1000min,明显…

Servlet的response对象

目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…

P2P服务端模型配合 Tool.net P2pServerAsync 类使用

Tool.Net 支持的 P2P 服务器模型实例 说明服务器部分相关代码相关调用实例Tcp版本Udp版本 最后附一张思维图 说明 当前文章,仅是Tool.Net 开源库的一个缩影。本次更新V5.0版本以上提供支持。可以提供简单实现P2P功能用于业务开发。 服务器部分相关代码 完整代码&…

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶,如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意:一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…

MQTT 异常断开(一)

分析问题总结: 前提:MQTT是基于TCP层再次封装,MQTT是不关心TCP层的实现与传输,但是如果TCP链路出现异常(丢失TCP ACK,网络延时TCP ACK等)一定会导致MQTT断开连接。 MQTT代理服务器存在如下问题&…

服务器没有图形界面没有显示器怎么办

可以用vnc。 vnc是开元的。什么是vnc? 使用vnc 下载vnc和vncserver命令。 每生成一个图形界面就叫做开启session会话。 vnc相关命令: start a new session: vncserver。 如果没有会话,一般从:1开始 端口5901 vncserver :2 #指定会话为:2 端…