3、敏感数据识别与分类分级:PII识别、金融数据分类分级标准、自动化扫描工具

好,咱们进入第三个核心话题。说实话,很多团队做数据安全,第一步就卡在「我到底有哪些敏感数据」这个问题上。你想想看,连家里有多少钱都不清楚,怎么谈得上防盗?

这一节,我带你捋清楚三件事:PII(个人身份信息)怎么识别、金融数据怎么分类分级、以及怎么用自动化工具把这些事干完。嗯,都是我在实际项目中踩过坑、填过土的经验。

3.1 PII识别:别把「张三」当路人

PII,全称 Personally Identifiable Information。说白了,就是能直接或间接定位到某个具体人的信息。

我见过最典型的翻车案例:某团队把「手机号」当普通字段处理,结果脱敏时漏了。后来被监管查到,罚得那叫一个惨。所以,PII 识别是数据脱敏的「第一道防线」。

常见的PII类型(金融场景下):
  • 直接标识符:姓名、身份证号、手机号、银行卡号、护照号
  • 准标识符:性别、出生日期、邮编、职业(组合起来能定位到人)
  • 生物特征:指纹、人脸、声纹(金融APP里越来越常见)
  • 行为数据:交易记录、浏览轨迹、设备指纹(别小看这些)

我个人习惯,在项目初期先拉一张「PII字段清单」。怎么拉?不是靠拍脑袋,而是靠正则表达式 + 样本数据扫描。比如身份证号的规则:18位数字,最后一位可能是X。银行卡号:16-19位数字,开头几位有固定规律。

一个小技巧: 我在项目中遇到过,有些字段名起得特别「隐晦」。比如字段名叫 user_extra,里面存的是身份证号。所以别只看字段名,一定要看数据内容。

3.2 金融数据分类分级标准:别把「黄金」当「石头」

金融数据,不是所有字段都同等重要。你想想看,客户的「姓名」和「交易密码」,能一样吗?所以我们需要一套分类分级标准。

目前国内金融行业,主要参考的是 JR/T 0197-2020《金融数据安全 数据安全分级指南》。这个标准把数据分成5个级别:

级别 名称 典型数据 脱敏要求
5级 极高敏感 交易密码、支付密钥、生物特征 必须加密存储,脱敏后不可逆
4级 高敏感 身份证号、银行卡号、手机号 必须脱敏,保留部分格式
3级 中敏感 姓名、地址、邮箱 建议脱敏,可部分保留
2级 低敏感 性别、年龄段、职业 可选择性脱敏
1级 公开 产品名称、利率、公告 无需脱敏

这里我要多说一句:分级不是一成不变的。我曾经帮一家银行做评估,发现他们把「客户经理姓名」定为3级,但后来发现这个字段和「客户资产规模」关联查询后,能推断出高净值客户信息。所以,分级要结合业务场景动态调整。

注意: 别把「分类」和「分级」搞混了。分类是按数据属性分(如客户信息、交易信息、风控信息),分级是按敏感程度分。两者是正交关系。

3.3 自动化扫描工具:别用手工「排雷」

说实话,靠人工去翻数据库表结构、看字段内容,那得累死。而且容易漏。所以,自动化扫描工具是必须的。

我常用的思路是:规则引擎 + 机器学习。规则引擎负责「快准狠」地识别已知模式,机器学习负责「猜」那些未知的、模糊的敏感数据。

下面是我自己写的一个简化版扫描脚本(Python 示例),用于识别数据库中的 PII 字段:

import re
import pandas as pd

# 定义PII识别规则
PII_PATTERNS = {
    '身份证号': r'\d{17}[\dXx]',
    '手机号': r'1[3-9]\d{9}',
    '银行卡号': r'\d{16,19}',
    '邮箱': r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
}

def scan_pii_in_column(data_series, column_name):
    """
    扫描某一列数据,返回匹配到的PII类型和数量
    """
    results = []
    for pii_type, pattern in PII_PATTERNS.items():
        matches = data_series.astype(str).str.findall(pattern)
        match_count = matches.explode().notna().sum()
        if match_count > 0:
            results.append({
                '字段名': column_name,
                'PII类型': pii_type,
                '匹配数量': match_count
            })
    return results

# 示例用法
# df = pd.read_sql('SELECT * FROM user_info', connection)
# for col in df.columns:
#     result = scan_pii_in_column(df[col], col)
#     if result:
#         print(result)
避坑指南: 我曾经用纯正则去扫,结果把「订单编号」误识别成了「身份证号」。为什么?因为订单编号也是18位数字。后来我加了「校验位验证」和「上下文分析」,准确率才上去。

市面上成熟的工具也不少。比如 Apache AtlasCollibra阿里云 DataWorks 都支持敏感数据自动发现。但我个人建议,别完全依赖工具。工具只能帮你「找到」敏感数据,但「怎么分级、怎么处理」还是得靠人。

3.4 知识体系:一张图看懂

下面我用一张 SVG 图,把这一节的核心逻辑串起来。你一看就明白:

敏感数据识别与分类分级核心逻辑 数据源 数据库 / 文件 / 日志 PII识别 正则匹配 + 样本扫描 + 上下文分析 金融数据分类分级 分类:客户信息 / 交易信息 / 风控信息 分级:1级(公开) → 5级(极高敏感) 自动化扫描工具 规则引擎 + 机器学习 + 元数据管理 关键产出 PII字段清单 数据分级矩阵 脱敏策略表 扫描报告 持续监控

这张图其实就讲了三层逻辑:先找到数据 → 再分清楚级别 → 最后用工具自动化。每一步都环环相扣,缺一不可。

3.5 实战建议:别追求「一步到位」

最后,我想给你几个实在的建议:

  • 先做「小范围试点」:别一上来就全量扫描。选一个核心业务库,跑一遍流程,发现问题再优化。
  • 分级标准要「落地」:JR/T 0197 是指导性标准,但具体到你的业务,可能需要微调。比如「客户地址」在银行是3级,但在保险可能是4级。
  • 工具只是辅助:我见过最离谱的事,是某团队买了商业扫描工具,结果配置错了规则,把「交易金额」当成了「身份证号」去脱敏。嗯,工具不会思考,你得教会它。
一句话总结: 敏感数据识别与分类分级,不是一次性的「体检」,而是需要持续迭代的「健康管理」。别想着做完一次就万事大吉,数据在变,业务在变,你的规则也得跟着变。

公众号:蓝海资料掘金营,微信deep3321