如何批量处理数据库中的敏感信息

技术如何批量处理数据库中的敏感信息本篇文章为大家展示了如何批量处理数据库中的敏感信息,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言对于一些敏感数据,往往会对其加密后再入库,这

本文向您展示了如何批量处理数据库中的敏感信息。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

前言

对于一些敏感数据,往往会在存储前进行加密,这是最简单的数据安全措施。

最常见的是手机号和身份证号。我相信很多公司都是以明文形式存储这些敏感信息的。

万一有人发现系统漏洞或者被拖到图书馆,基本就凉了。

老黄最近也发现了公司内部的一个制度存在这样的问题。第一次发现的时候,震惊了,这么赤裸裸的明文手机号和身份证号。

第一反应是加密这两个数据。

既然需要加密,那么使用中的系统肯定会受到影响,几分钟之内几千万的数据是无法修复的。

本系统使用的数据库是阿里巴巴云的RDS(SQL Server)。

先简单说一下老黄的治疗方案。

如何处理

整个处理流程分为三个步骤:

修改数据库中的字段长度时,系统需要更新一个版本进行兼容处理,使用统一的加密方式进行写入,读取时加入长度判断,长度大于20时解密,保证密文不会直接显示。在修改数据之前,数据库为这两个字段设置的长度是20,现在统一调整为150。

公司内部已经统一了一套加解密方式,所以调整系统相对简单,在数据层统一处理。

剩下的就是去数据库修改数据了。

统一的加密方法,没有办法直接在数据库中使用,所以我们只能单独编写程序来处理。

修订后的数据还细分为以下三个步骤。

读取源数据,加密相关字段,将加密后的数据写入临时表,根据临时表更新源表的相关字段。这里的核心一个是批量写入批量更新.如果每个项目都更新,我不知道需要多长时间才能处理完。

首先编写一个控制台程序,将加密后的数据按照Id分批次,一次写入5000条的频率,将一百万条数据视为一个批次。

varflag=true

var begin=0;

vartmpEnd=begin 5000

varend=1000000

while(标志)

{

//省略读取数据

foreach(variteminlist)

{

DataRowdr=dt。NewRow();

dr[' Id ']=项目。id;

dr['IDCard']=GetEncryptValue(项。IDCard?'');

dr['PhoneNo']=GetEncryptValue(项。电话号码?'');

dr['IDCardRaw']=item。IDCard?'';

dr['PhoneNoRaw']=item。电话号码?'';

>        dt.Rows.Add(dr);
    }

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        conn.Open();
        SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
        bulkCopy.DestinationTableName = "enc_tmp";
        bulkCopy.BatchSize = dt.Rows.Count;

        bulkCopy.WriteToServer(dt);
    }

    begin = tmpEnd;
    tmpEnd += 5000;

    if (tmpEnd >= end || list == null || !list.Any())
    {
        flag = false;
    }

    Console.WriteLine(begin);
}

 

为保证写入的速度,先不要在那个临时表建索引,等数据写进去后再给Id建索引。

把数据写进临时表后,下面就是直接用SQL脚本来批量更新了。

-- 建索引
create index idx_enc_tmp_id on enc_tmp (id)


-- 批量更新
update dbo.yourtable
set PhoneNo= a.PhoneNo, IDCard = a.IDCard
from dbo.yourtable b
inner join dbo.enc_tmp a
on a.id=b.id
-- 这里更新要看数据库的配置,如果配置高,可以一次更新,不然就建议25万或50万一个批次
-- where a.id >= 0 and a.id <= 500000


-- 查询校验一下
SELECT top 100 [id]     
      ,[IDCard]     
      ,[PhoneNo]
FROM dbo.yourtable WITH (NOLOCK)
where id > 0 and id <= 500000 
order by id asc

-- 清除临时表的数据
truncate table dbo.enc_tmp

-- 删除索引
drop index idx_enc_tmp_id on enc_tmp

 

设计系统的时候,数据安全还真的是不容小觑的,对一些敏感信息还是要加密入库的。

修改数据的过程中,也涉及到了两个知识点,数据的批量插入批量更新

上述内容就是如何批量处理数据库中的敏感信息,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/129608.html

(0)

相关推荐

  • 如何使用variant代替union

    技术如何使用variant代替union如何使用variant代替union,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。union(联合体

    攻略 2021年11月10日
  • 二项式反演 学习笔记

    技术二项式反演 学习笔记 二项式反演 学习笔记概念
    二项式反演其实就是利用容斥的思想处理一些通过求“至少或至多”来解决“恰好”的问题。
    形式
    \[\begin{align*}
    f(n)=\sum_{i=

    礼包 2021年12月23日
  • 抖音一元刷100赞,哪个网站可以买抖音赞

    技术抖音一元刷100赞,哪个网站可以买抖音赞小编说到抖音刷赞,而抖音热门就是自然涨粉的唯一方式,只有获得热门推荐才有可能会涨粉,但是想要上热门必须要有一定的基础点赞量、评论量、播放量,没有这些指标是很难上热门的,怎么办呢

    测评 2021年10月26日
  • [loj3220]Terytoria

    技术[loj3220]Terytoria [loj3220]Terytoria显然两维是独立的,不妨考虑其中一维的答案
    将其离散,枚举交包含的某一段(若不存在即交为空),进而即可确定所有段的方向,用线段

    礼包 2021年12月18日
  • 满足解决配置DG Broker时报错Error: ORA-16698问题

    技术满足解决配置DG Broker时报错Error: ORA-16698问题这篇文章主要介绍“满足解决配置DG Broker时报错Error: ORA-16698问题”,在日常操作中,相信很多人在满足解决配置DG Bro

    攻略 2021年11月10日
  • 怎样使用HLAscan进行HLA分型

    技术怎样使用HLAscan进行HLA分型这篇文章将为大家详细讲解有关怎样使用HLAscan进行HLA分型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HLAScan是由韩

    攻略 2021年11月10日