本文向您展示了如何批量处理数据库中的敏感信息。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。
前言
对于一些敏感数据,往往会在存储前进行加密,这是最简单的数据安全措施。
最常见的是手机号和身份证号。我相信很多公司都是以明文形式存储这些敏感信息的。
万一有人发现系统漏洞或者被拖到图书馆,基本就凉了。
老黄最近也发现了公司内部的一个制度存在这样的问题。第一次发现的时候,震惊了,这么赤裸裸的明文手机号和身份证号。
第一反应是加密这两个数据。
既然需要加密,那么使用中的系统肯定会受到影响,几分钟之内几千万的数据是无法修复的。
本系统使用的数据库是阿里巴巴云的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