mysql 透明加密 绿色版_简单为mysql 实现透明加密方法

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

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

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

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

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

c68919cae995bbbbd93d0cde0314f23d.png

---- 分割线  ----

首先为了避免加密 和 解密的 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;

我自己测试的结果截图:

6fe3d92ab565cefe65e9bd039b8af3af.png

今天就介绍这些吧。

根据引用\[1\]和引用\[2\]的内容,从MySQL 8.0.4开始,MySQL默认的身份验证插件从mysql_native_password改为caching_sha2_password。如果你想修改MySQL的默认加密方式为caching_sha2_password,你可以按照以下步骤进行操作: 1. 首先,登录到MySQL服务器。 2. 运行以下命令来修改默认的加密方式: ``` ALTER USER 'your_username'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your_password'; ``` 这里的'your_username'是你要修改的用户名,'localhost'是你的主机名,'your_password'是你要设置的新密码。 3. 如果你想修改所有用户的加密方式,可以使用以下命令: ``` ALTER USER 'your_username'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your_password'; ``` 这将修改所有用户的加密方式为caching_sha2_password。 4. 最后,刷新MySQL权限以使更改生效: ``` FLUSH PRIVILEGES; ``` 通过执行以上步骤,你可以成功修改MySQL的默认加密方式为caching_sha2_password。这样做可以提高数据库的安全性。 #### 引用[.reference_title] - *1* *2* *3* [浅谈 MySQL 新的身份验证插件 caching_sha2_password](https://blog.csdn.net/GreatSQL2021/article/details/127647735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值