亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何批量處理數據庫中的敏感信息

發布時間:2021-12-01 18:39:59 來源:億速云 閱讀:241 作者:柒染 欄目:大數據

本篇文章為大家展示了如何批量處理數據庫中的敏感信息,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

對于一些敏感數據,往往會對其加密后再入庫,這個是對數據安全性的一個最為簡單的措施。

最常見的莫過于手機號碼和身份證號了,相信還是有不少公司對這些敏感信息是明文存儲的。

萬一被別人發現系統漏洞,或者是被拖庫,那基本上就涼涼了。

老黃最近也是發現了公司內部一個系統有這樣的問題,剛發現的時候都嚇了我一跳,這么赤裸裸的明文手機號和身份證號。

第一反應就是要把這兩個數據進行加密處理。

既然要加密處理,那么正在使用的系統肯定就會受到影響,而且幾千萬數據,也不是幾分鐘就能搞定的。

這個系統用的數據庫是阿里云的RDS(SQL Server)。

下面簡單說一下老黃這邊的處理方案。

 

如何處理

整個處理的流程是分了三個步驟:

  1. 修改數據庫中的字段長度
  2. 系統要更新一個版本做兼容處理,寫入要用統一的加密方法,讀取的時候,要加一個長度判斷,當長度大于20的時候,需要進行解密操作,這樣才能確保不會把密文直接展示出去。
  3. 修改數據

之前數據庫給這兩個字段設置的長度都是20,現在統一調整成150。

公司內部已經統一了一套加解密方法了,所以系統調整這一塊是比較簡單的,統一在數據層處理。

剩下的就是去數據庫改數據了。

統一的加密方法,在數據庫中沒有辦法直接使用,所以只能單獨寫個程序去處理。

改數據也細分為下面3步。

  1. 讀取源數據,加密相關字段
  2. 將加密的數據寫入到一張臨時表中
  3. 根據臨時表去更新源表的相關字段

這里的最為核心的一個就是批量寫入批量更新。如果一條條更新,那不知道要等多久才能全部處理完。

先是寫一個控制臺程序,根據Id分批次,把加密好的數據,以五千條一次寫入的頻率,一百萬數據當成一個批次。

var flag = true;

var begin = 0;
var tmpEnd = begin + 5000;
var end = 1000000;

while (flag)
{
    // 省略讀取數據
    foreach (var item in list)
    {
        DataRow dr = dt.NewRow();
        dr["Id"] = item.Id;
        dr["IDCard"] = GetEncryptValue(item.IDCard ?? "");
        dr["PhoneNo"] = GetEncryptValue(item.PhoneNo ?? "");
        dr["IDCardRaw"] = item.IDCard ?? "";
        dr["PhoneNoRaw"] = item.PhoneNo ?? "";
        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
 

設計系統的時候,數據安全還真的是不容小覷的,對一些敏感信息還是要加密入庫的。

修改數據的過程中,也涉及到了兩個知識點,數據的批量插入批量更新

上述內容就是如何批量處理數據庫中的敏感信息,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣武区| 成都市| 沾益县| 环江| 乐清市| 泸水县| 湘潭市| 三门峡市| 宜昌市| 大理市| 灵川县| 富顺县| 岑巩县| 沾化县| 桐庐县| 崇礼县| 富平县| 谷城县| 双辽市| 镇康县| 平邑县| 肃北| 石首市| 彰武县| 大姚县| 饶河县| 渭源县| 乌拉特前旗| 琼结县| 阳泉市| 图们市| 华阴市| 尉犁县| 新巴尔虎右旗| 天柱县| 威宁| 阿拉尔市| 沙雅县| 轮台县| 曲松县| 双牌县|