基于数据库存储做数据表的数据加密方案

前面研究了针对于数据库中的敏感数据通过代理层面去敏感数据的脱敏处理,但是业务场景在于查询层面做了数据保护,必须走代理服务器才能实现数据保护效果,一旦真实服务器地址暴露已知用户名和密码是可以直接连接真是服务器的(当然也可以通过网络管理限制),而且数据中存储的数据始终是明文,如果说数据文件泄露,数据其实还是会有暴露的风险,那么就涉及到了另外一个解决方案,如果说直接对数据库中存储的数据进行加密处理了,那么即使泄露了泄露后的内容也是密文,也可以起到数据保护的作用,今天对于尝试的一种防止数据库数据泄露的解决方案过程做一个简单的笔记分享。

一、mysql字段加密

主要目的在于数据在数据库中存储加密后的密文,通过对客户端连接信息进行判断给与查询部分展示明文或者密文,原理比较简单直接看操作流程。
1.创建自定的AES加解密函数

#创建加密函数
CREATE FUNCTION cus_encrypt(info varchar(100),seacrt_key varchar(20)) RETURNS varchar(100) CHARSET utf8
BEGINRETURN HEX(AES_ENCRYPT(info,seacrt_key));
END;
#创建解密函数
CREATE FUNCTION cus_decrypt(info varchar(100),seacrt_key varchar(20)) RETURNS varchar(100) CHARSET utf8
BEGINRETURN AES_DECRYPT(UNHEX(info),seacrt_key);
END;

2.创建表准备基础数据与基础用户

#建表
CREATE TABLE user (id int(11) NOT NULL,name varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,user varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,password varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,PRIMARY KEY (id)
) ;INSERT INTO user(id, name, user) VALUES (1, 'zhangsan', '123');
INSERT INTO user(id, name, user) VALUES (2, 'lisi', '445');
INSERT INTO user(id, name, user) VALUES (3, 'wangwu', '789');
#创建新表_随机名称
select concat('encry_',substring(md5(rand()),1,20))create table encry_1ad8e31295906023a5fa as
select id,name,user,cus_ENCRYPT(user,"123456") as password from user
#创建另外一个登录用户
grant select,insert,update,delete on *.* to "testencry"@"%" Identified by "123456";

3.加密后的真实表,创建暴露名称的视图解析数据做逻辑判断,非root用户展示密文,root用户展示明文。

create view user_view as
SELECT id,name,user,case SUBSTRING_INDEX(user(),'@',1)
when 'root' then cus_decrypt(password,'123456')
else password
end  as password
from encry_1ad8e31295906023a5faselect * from encry_1ad8e31295906023a5fa
select * from user_view

以root用户登录查看结果

以新建用户testencry登录查看数据

数据库中存在的真实数据,存储的都是密文数据

因为对于查询的用户来说视图和表其实是无感知的,暴露一个视图里面写一些判断逻辑就可以实现针对某些特定的用户或主机查看的时候显示解密后的数据,普通用户没有权限查看密文,以此来达到保护数据的目的。

ps:防外行可以,但是要防懂技术的人还是算了。

二、mysql表空间加密

1.安装mysql8版本,5.7版本部分支持,参考

2.创建数据库准备原始表数据

create database db1;use db1;CREATE TABLE `user_innodb` (`id` int NOT NULL,`name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,`card` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;INSERT INTO `db1`.`user_innodb`(`id`, `name`, `card`) VALUES (1, 'zhangsan', '1234');
INSERT INTO `db1`.`user_innodb`(`id`, `name`, `card`) VALUES (2, 'lisi', '5678');
INSERT INTO `db1`.`user_innodb`(`id`, `name`, `card`) VALUES (3, 'admin', '0000');
INSERT INTO `db1`.`user_innodb`(`id`, `name`, `card`) VALUES (4, 'test', '2223');CREATE TABLE `user_myisam` (`id` int NOT NULL,`name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,`card` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;INSERT INTO `db1`.`user_myisam`(`id`, `name`, `card`) VALUES (1, 'zhangsan', '1234');
INSERT INTO `db1`.`user_myisam`(`id`, `name`, `card`) VALUES (2, 'lisi', '5678');
INSERT INTO `db1`.`user_myisam`(`id`, `name`, `card`) VALUES (3, 'admin', '0000');
INSERT INTO `db1`.`user_myisam`(`id`, `name`, `card`) VALUES (4, 'test', '2223');

3.查看后台存储数据为明文存储

4.准备安装加密插件并且加密

show global variables like '%keyring_file_data%';INSTALL PLUGIN keyring_file soname 'keyring_file.so';set global keyring_file_data='/var/lib/mysql-keyring/keyring';show plugins;alter table user_innodb encryption='Y';
alter table user_myisam encryption='Y';
#The storage engine for the table doesn't support ENCRYPTION

可以看到效果表user_innodb文件内容变成了密文。myisam引擎的表加密失败了,可能不支持。

三、oracle表空间加密

上面方案是解决了数据存储明文的问题,这里再介绍一个oracle数据库提供的表空间加密方案wallet,由于oracle的数据文件存储是可移植且可解析的,也就是说所只要拿到oracle的数据文件把他导入到本地的oracle数据库中是可以还原出所有数据的,即使是不导入也可以用命令解析文件查看大部分数据,使用wallet就可以对数据文件的存储进行加密处理,必须有相应的密钥才可以解析,测试以oracle19c为例子。

1.创建wallet

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "111111";

SELECT * FROM GV$ENCRYPTION_WALLET;


2.查看服务器上对应的wallet目录不存在,创建它

3.再次创建wallet成功,相应的目录下会生成对应的文件。

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "111111";


4.创建两个表空间,一个普通表空间和一个加密表空间并且创建一张表写入相应的数据。

create tablespace jiami_space datafile '/data/database/jiami_space.dbf' size 1m  autoextend on next 1m encryption USING 'AES128' default storage(encrypt);
create tablespace base_space datafile '/data/database/base_space.dbf' size 1m  autoextend on next 1m permanent online;CREATE TABLE "jiami_user" ("id" NUMBER,"name" VARCHAR2(255),"phone" VARCHAR2(255),PRIMARY KEY ("id")
) tablespace jiami_space;CREATE TABLE "base_user" ("id" NUMBER,"name" VARCHAR2(255),"phone" VARCHAR2(255),PRIMARY KEY ("id")
) tablespace base_space;insert into "base_user" values (1,'zhangsan','111111111' );
insert into "base_user" ("id","name","phone") values ('2','lisi','111111111' );
insert into "base_user" ("id","name","phone") values ('3','wangwu','111111111' );insert into "jiami_user" ("id","name","phone") values (1,'zhangsan','111111111' );
insert into "jiami_user" ("id","name","phone") values ('2','lisi','111111111' );
insert into "jiami_user" ("id","name","phone") values ('3','wangwu','111111111' );select * from "base_user"
select * from "jiami_user"

5.验证阶段,正常情况下两张表都可以正常访问



5.如果关闭wallet,则未加密空间的表访问正常,加密空间的表无法访问。

6.后台验证数据文件存储情况。

这里就可以看到wallet加密后的效果了,正常表空间的数据是可以用 strings file解析出来的,而加密后的表空间无法解析,必须有相应的密钥才可以解析,这样即使是表空间文件暴露了只要密钥没有暴露其实是无法解析存储的数据的。

ps:只是一个简答的思路,想到这里尝试了一下顺便做个笔记,当然复杂功能还可以继续扩展。

数据防泄漏加密保护方案笔记相关推荐

  1. DLP数据丢失防护/数据防泄漏 隐私保护概念解析

    DLP数据丢失防护/数据防泄漏 隐私保护概念解析 预防数据丢失 Data Loss Prevention 数据丢失是有意或无意地将信息发布到不受信任的环境. 预防数据丢失(DLP), 也称为数据泄漏预 ...

  2. 静态数据/动态数据/使用中数据概念及数据防泄漏 隐私保护

    数据防泄漏Data Loss Prevention 预防数据丢失(DLP),也称为数据泄漏预防,指的是一个全面的方法覆盖人,流程和系统,识别.监控.和保护数据在使用(例如,端点的行为),动态数据(例如 ...

  3. 2017年Gartner的数据防泄漏(DLP)魔力象限(Magic Quadrant)

    2017年Gartner的数据防泄漏(DLP)魔力象限(Magic Quadrant) 入围厂商介绍 Leaders 1. Symantec 赛门铁克总部位于加州山景城,2007年收购Vontu以后正 ...

  4. DLP数据防泄漏技术(转载)

    注:本文转载自"绿盟科技博客". 原文链接:http://blog.nsfocus.net/data-leak-prevention-technology/ 需求背景 在企业中提到 ...

  5. 数据防泄漏有哪些常见误区?

    近年来,随着信息技术的发展,目前国内的数据规模和应用模式发生了极大的变化,不仅是数据的规模逐渐扩大,数据的地位与应用对于企事业单位来说也变得越来越重要.与此同时,数据泄露的风险也在不断攀升.在此背景下 ...

  6. 数据防泄漏(DLP)

    产品简介 以人工智能和自然语言处理技术为核心,创新融合三代数据安全技术,中安威士自主研发的数据防泄漏系统(DLP).该系统可全面监控并阻止单位机密.知识产权和客户信息的泄露.并帮助用户符合相关法律法规 ...

  7. 山丽防水墙数据防泄漏系统

    在互联网开放的今天,企业的智力资产(如电子文档.材料配方.源代码等)面临着严重的扩散风险.重要文档或者存在于文件服务器上,或者存在于笔记本上,更多散存于台式机上,尤其面临着内外人员泄密的巨大风险.对应 ...

  8. DLP数据防泄漏之市场态势

    之前提到,为何将数据防泄漏-数据加密软件硬说成是 DLP,其实这和当前市场态势密切相关.数据加密软件在国内发展已有十几年的历史,期间用户对其一直褒贬不一,尤其是在 2009年虹安推出国内首款 DLP ...

  9. DLP数据防泄漏之正确概念

    DLP数据防泄漏之正确概念 所谓数据防泄漏, 其本意是指通过系列安全措施保护敏感数据安全, 防止敏感数据泄露.扩散.事实上,数据防泄漏同数据防泄密.数据防泄露本质上是一回事,都是数据加密软件,只不过是 ...

  10. 数据防泄漏产品该如何选择

    数据防泄漏产品选型 数据防泄漏产品主要有安全容器(SDC沙盒)和DLP.文档加密.云桌面等,其优缺点做客观比较如下: 比较内容 安全容器(SDC沙盒) DLP 文档加密 云桌面 代表厂家 *信达 卖咖 ...

最新文章

  1. 用友uclient客户端下载手机_萤火语音2021手机版下载_萤火语音app最新版客户端下载...
  2. Spring复习笔记:2
  3. Ubuntu 修改时区和时间
  4. 机器学习中导数最优化方法(基础篇)
  5. 【存储知识学习】第四章-七种RAID-《大话存储》阅读笔记
  6. Go 语言web 框架 Gin 练习3
  7. DDD:实体如何处理外部依赖
  8. android运行过程简书,android 启动过程(一)
  9. 前端学习(2161):vuecli项目得目录结构解析
  10. java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)
  11. 51 Nod 1161 Partial sums
  12. Azure上七层负载均衡APP Gateway
  13. 【HDU1251+POJ2001+POJ3630】单词前缀问题整理
  14. C/C++回调方式系列之一 函数指针和函数回调模式
  15. Linux如何磁盘分区
  16. 小米android的手机根目录,小米手机用re模式进行刷机。把rom放进根目录,根目录是哪里?...
  17. c# 调用restful json_SSM实现RESTFul风格的CURD操作
  18. WEB前端包含哪些内容
  19. WordPress网站程序如何搭建教程详细流程步骤
  20. 【重庆SEO教程】如何诊断一个网站SEO优化的好坏

热门文章

  1. 是一套基于PHP,zhw_cms 中和网企业建站系统这是一套基于PHP的快速 ,主要适用于中小 建立 WEB(ASP,PHP,...) 267万源代码下载- www.pudn.com...
  2. (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  3. spinner requestlayout() improperly called by during layout running second layout pass
  4. 汽车知识待解决作业题
  5. 转换uptime_王者荣耀角色转换什么时候正式上线_王者荣耀角色转换上线时间-超分手游网...
  6. python图书销售系统
  7. 多功能计算机如何关闭,电脑教程:键盘关闭fn多功能键盘
  8. 【UE4】给游戏制作一个简易的小地图
  9. 初中计算机ps教程,初中信息技术《Photoshop 初探——基本操作》教学设计
  10. 携程网移动端首页-学习与自我分析