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

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

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

前言

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

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

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

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

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

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

本系统使用的数据库是阿里巴巴云的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)

相关推荐

  • lte网络注册流程,3)

    技术lte网络注册流程,3) lte网络注册流程(3)
    lte网络注册流程(3)
    本文介绍下下lte网络注册的附着和建立默认承载的过程之中消息分析.
    1.attach request消息中主要包括:EP

    礼包 2021年11月25日
  • 窗口事件

    技术窗口事件 窗口事件1.窗口事件属性:
    window.onfocus = function(){ // 窗口获取焦点事件};
    window.οnblur= function(){ // 窗口失去焦点事

    礼包 2021年12月5日
  • 香港服务器搭建网站哪家好

    技术香港服务器搭建网站哪家好使用香港服务器搭建网站有很多好处,主要有以下几点高端性能: 香港服务器租用最重要的好处之一是您可以从您的网站获得高端性能。有了这个,您可以获得大带宽和高存储容量的香港服务器租用。使用香港服务器

    礼包 2021年12月21日
  • message可数吗,news与message的区别

    技术message可数吗,news与message的区别message, newsmessage可数吗。这两个名词都有“消息”的意思,但它们的用法不一样。
    message是个可数名词,指口头、书面、无线电等多种渠道传送的

    生活 2021年10月21日
  • Ubuntu14.04 CuDNN6.5如何安装

    技术Ubuntu14.04 CuDNN6.5如何安装这篇文章主要为大家展示了“Ubuntu14.04 CuDNN6.5如何安装”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“U

    攻略 2021年11月15日
  • 如何在原有的框架中集成shiro

    技术如何在原有的框架中集成shiro今天就跟大家聊聊有关如何在原有的框架中集成shiro,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天的任务是在原有的框架中集

    攻略 2021年10月19日