一般用户在数据库中保存数据,虽然数据库存储的是二进制,无法直接明文打开查看,但是如果是一个外行人,直接连接进入mysql中,还是可以直接查看数据的。

所以对于一些核心数据,特别是企业重要数据资产,一般会再增加一个透明加密的数据安全保护,以避免一些无关人员直接获取重要信息。

在O记里,就有专门的透明加密的功能模块,叫做Oracle Key Manager,感兴趣的童鞋可以去研究一下。

众所周知,mysql 在互联网里使用得非常多,除了它的性能确实不错外,免费也是一个重要原因。但是免费就代表着不讲究,对于一些重要的企业功能,它没有,你也不能够说啥,毕竟O记也为大家提供商业版本。

所以在MySQL 中,是不具备透明加密功能的。虽然如此,但是mysql 具备加密/解密的基础功能啊,还有函数和触发器,无论环境多么恶劣,只要想做成一件事,总有方法来实现,人民群众是历史的创造者。

---- 分割线  ----

首先为了避免加密 和 解密的 key 直接暴露,我们先创造一张表来保存这个key 值。

--配置一个保存 加/解 密 key 的表,并且提前准备一个key 值

create table tkey (keyname varchar(100));insert into tkey values ('sequoiadb');

创建一张测试表,避免后面的触发器无法创建

--测试表,验证加密和解密效果

drop table if existstest;create table test (id int, name varchar(100));

创建insert 和 update 的触发器,触发器只针对 test.name 字段进行加密保存,对 test.id 字段不做处理。如果大家在业务里想做得更加复杂,肯定需要包装一层配置方式,这里只介绍如何实现

--insert的 触发器,只针对 test.name 字段进行加密保存

drop trigger if existst_insert;

DELIMITER ;;create triggert_insert

beforeinsert ontestforeach rowbegin

select keyname into @key_name from tkey limit 1;set new.name = hex(AES_ENCRYPT(new.name, @key_name));end;;

DELIMITER ;--update 触发器,只针对 test.name 字段进行加密更新

drop trigger if existst_update;

DELIMITER ;;create triggert_update

beforeupdate ontestforeach rowbegin

select keyname into @key_name from tkey limit 1;set new.name = hex(AES_ENCRYPT(new.name, @key_name));end;;

DELIMITER ;

创建一个解密的函数,主要是为了在查询时,更加友好

--解密 函数

drop function if existsdecrypt;

DELIMITER ;;create function decrypt(col varchar(100))returns varchar(100) DETERMINISTICBEGIN

select keyname into @key_name from tkey limit 1;return AES_DECRYPT(unhex(col), @key_name);END;;

DELIMITER ;

这样就基本配置好了mysql 的透明加密和 解密动作了,我们来验证一下

--验证sql,可以通过普通查询和解密查询,看看数据是否真的被自动加密了

truncate tabletest;insert into test values (1,'sdb');insert into test values (2, 'sequoiadb');--普通查询,得到的结果是一堆乱码

select * fromtest;--解密查询,返回预期结果

select id, decrypt(name) fromtest;update test set name = 'jushan' where id = 1;--解密查询

select id, decrypt(name) from test where id = 1;

我自己测试的结果截图:

*** 分割线 ***

上面的例子是结合了触发器和函数,对于复杂的业务系统,可能会在运维时造成影响,所以这里再提供一个只使用函数的方式,实现数据的加密和解密

创建 密钥表

create table tkey (keyname varchar(100));insert into tkey values ('sequoiadb');

创建 测试表

create table test (id int, name varchar(100));

创建加密函数(encrypt名称和已有函数冲突,所以用了 encrypt_new)

DELIMITER ;;create function encrypt_new(col varchar(100))returns varchar(100) DETERMINISTICbegin

select keyname into @key_name from tkey limit 1;return hex(AES_ENCRYPT(col, @key_name));end;;

DELIMITER ;

创建解密函数

DELIMITER ;;create function decrypt_new(col varchar(100))returns varchar(100) DETERMINISTICBEGIN

select keyname into @key_name from tkey limit 1;return AES_DECRYPT(unhex(col), @key_name);END;;

DELIMITER ;

测试

truncate tabletest;insert into test values (1, encrypt_new('abc'));select * fromtest;select id, decrypt_new(name) from test;

今天就介绍这些吧。

mysql实现内容加密_简单为mysql 实现透明加密方法相关推荐

  1. mysql启动日志指令_简单整理MySQL的日志操作命令

    1.首先确认你日志是否启用了 ?1MySQL>show variables like'log_bin'; 如果启用了,即ON那日志文件就在MySQL的安装目录的data目录下 2.怎样知道当前的 ...

  2. mysql blob 内容查看_这些被你忽视的MySQL细节,可能会让你丢饭碗!

    我们在 MySQL 入门篇主要介绍了基本的 SQL 命令.数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我 ...

  3. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  4. Mysql数据库的简单备份与还原_简单的MySQL备份与还原方法分享

    为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyA ...

  5. mysql二级考试范围_计算机二级MySQL考试内容大纲

    计算机二级MySQL考试内容大纲 以下是教育部考试中心公布的最新计算机二级MySQL考试内容大纲,供广大要考计算机二级MySQL的同学参考. 一.基本概念与方法 1.数据库的基本概念和特点 2.数据库 ...

  6. mysql慢查询检查流程_简单谈谈MySQL优化利器-慢查询

    慢查询 首先,无论进行何种优化,开启慢查询都算是前置条件.慢查询机制,将记录过慢的查询语句(事件),从而为DB维护人员提供优化目标. 检查慢查询是否开启 通过show variables like ' ...

  7. mysql share 字体 中文_简单明白彻底解决 MySQL 中文编码问题

    1. 问题重现 mysql> create database school; mysql> use school; mysql> create table student(name ...

  8. mysql网络投票系统设计_分享PHP+MySQL投票系统的设计和实现

    PHP+MySQL是初学者开发的简单操作系统.PHP+MySQL系统是一个基于网络的网站投票程序.下面成都人的seo技术频道编辑介绍共享PHP+MySQL投票系统的设计与实现.让我们看看 数据库设计 ...

  9. 向mysql数据库发送指令_常用的MySQL数据库命令大全

    飞信2017V5.6.8860.0 官方正式版 类型:聊天其它大小:69.1M语言:中文 评分:9.6 标签: 立即下载 常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 ...

最新文章

  1. SAP ABAP 异常处理
  2. DNS区域传送、子域授权
  3. Nginx核心要领五:worker_processes、worker_connections设置
  4. 1005. 继续(3n+1)猜想 (25)
  5. mac 杀掉占用某个端口的进程
  6. pthread_create会导致内存泄露
  7. python3函数写文件路径时,怎么写文件路径
  8. 【笔记】多态之Override
  9. 配置豪华的 Windows 开发环境
  10. 火狐浏览器复制网页文字_从Firefox中的网页链接的多种“复制”格式中选择
  11. 72个炫酷的CSS技巧
  12. C/C++游戏项目教程:《雷霆战机》
  13. Laravel 消息通知使用 EasySms 短信包插件
  14. 在线修改http header
  15. 曲线与曲面的切线法线等等等
  16. 咸鱼ESP32实例—MQTT
  17. 吴永辉教授2021年讲课1-2
  18. A example of Maximum A Posteriori (MAP) estimation
  19. 台湾安格推出的用于TYPEC转VGA HDMI音视频多功能扩展坞方案选型和方案设计|USB-C转VGA HDMI类扩展器方案选型和方案讲解
  20. 关于“网络安全”五点须知!

热门文章

  1. hive java udf_UDF_Hive教程_田守枝Java技术博客
  2. 回文子序列_计算回文子序列的总数
  3. 子网掩码+ip地址_C ++程序使用位掩码查找唯一编号
  4. JAVA Opencv在图片上添加中文
  5. 【视频版】最新版Swagger 3升级指南和新功能体验!
  6. 面试官 | 讲一下如何给高并发系统做限流?
  7. 面试官:为什么 Spring 中的 bean 默认为单例?
  8. Mysql5.0没有nvarchar,national
  9. docker-conpose 入门
  10. nginx 监听同一端口