3. 数据分类分级:个人敏感信息与一般个人信息、数据分类方法论、分级标准与标签体系设计

数据分类分级,说白了就是给数据“贴标签”和“定等级”。

我经常跟团队讲,没有分类分级,数据安全就是一句空话。你连自己手里有什么数据、哪些最要命都不知道,怎么保护?

这一章,我们就把这件事彻底讲透。

3.1 个人敏感信息 vs 一般个人信息

先搞清楚一个基本问题:哪些数据是“敏感”的?

根据《个人信息保护法》,个人敏感信息一旦泄露或者非法使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害。比如生物识别、金融账户、行踪轨迹等。

一般个人信息呢?就是那些没那么要命的,比如姓名、性别、出生日期(不带身份证号的那种)。

核心区别:

  • 敏感信息:泄露后可能造成歧视、人身财产损害。处理需单独同意。
  • 一般信息:泄露后影响较小。处理只需告知+同意即可。

我在项目中遇到过一家电商公司,把用户的收货地址当一般信息处理。结果地址泄露,被不法分子用来精准诈骗。嗯,后来他们被罚了。你想想看,地址+姓名+电话,组合起来就是敏感信息了。

3.2 数据分类方法论

分类,就是按业务属性把数据分门别类。我个人习惯用“业务域-数据域-数据项”三层结构。

层级 说明 示例
业务域 按业务板块划分 用户管理、交易、风控
数据域 按数据主题划分 用户画像、订单、日志
数据项 具体字段 手机号、身份证号、消费金额

举个例子:

  • 业务域:用户管理
  • 数据域:用户画像
  • 数据项:手机号、性别、年龄、职业

这样做的好处是,当业务调整时,你只需要调整业务域,数据域和数据项基本不动。我曾经帮一家金融公司重构分类体系,他们之前按部门分,结果部门一合并,全乱了。后来改成三层结构,再也没出过问题。

我的建议:分类时一定要拉上业务方一起做。光靠安全团队闭门造车,出来的分类没人用。

3.3 分级标准

分级,就是给数据定“危险等级”。我一般用四级制:

等级 名称 典型数据 保护要求
L4 极敏感 身份证号、银行卡号、生物识别 加密存储、访问控制、审计
L3 敏感 手机号、家庭住址、位置信息 加密存储、最小权限
L2 内部 姓名、性别、工作邮箱 内部使用,不对外
L1 公开 公司名称、公开联系方式 无特殊要求

为什么会这样定?因为不同等级的数据,泄露后的影响天差地别。L4的数据一旦泄露,公司可能面临千万级罚款。L1的数据,泄露了也没人在意。

注意:分级不是一成不变的。比如疫情期间,行程码数据从L2临时升到了L4。要建立动态调整机制。

3.4 标签体系设计

标签,就是给数据打上机器可读的标记。我建议用“分类+分级+业务属性”的组合标签。

举个例子:

{
  "data_item": "手机号",
  "category": "用户管理-用户画像",
  "level": "L3",
  "sensitive_type": "个人敏感信息",
  "business_owner": "用户中心",
  "retention_period": "365天",
  "encryption_required": true
}

这个标签包含了:

  • 分类路径:用户管理-用户画像
  • 安全等级:L3
  • 敏感类型:个人敏感信息
  • 业务属性:负责人、保留期限、加密要求

我在项目中遇到过,有些公司只打“敏感/非敏感”两个标签。结果呢?所有数据都标成了敏感,等于没标。标签要细,但也不能太细,否则没人维护。我个人觉得,5-8个属性字段就够了。

小技巧:标签可以自动打。比如手机号正则匹配到,自动打上“L3-个人敏感信息”。但人工复核不能省,我见过正则漏掉座机号的案例。

3.5 落地实践:从理论到代码

理论说完了,来点实际的。下面是一个简单的标签自动标注脚本:

import re

def auto_tag(data_item, value):
    """自动打标签"""
    tag = {
        "data_item": data_item,
        "category": "未知",
        "level": "L1",
        "sensitive_type": "一般个人信息"
    }
    
    # 手机号
    if re.match(r'^1[3-9]\d{9}$', value):
        tag["level"] = "L3"
        tag["sensitive_type"] = "个人敏感信息"
        tag["category"] = "用户管理-联系方式"
    
    # 身份证号
    elif re.match(r'^\d{17}[\dXx]$', value):
        tag["level"] = "L4"
        tag["sensitive_type"] = "个人敏感信息"
        tag["category"] = "用户管理-身份信息"
    
    # 邮箱
    elif re.match(r'^[\w\.-]+@[\w\.-]+\.\w+$', value):
        tag["level"] = "L2"
        tag["sensitive_type"] = "一般个人信息"
        tag["category"] = "用户管理-联系方式"
    
    return tag

# 使用示例
print(auto_tag("手机号", "13800138000"))
# 输出:{'data_item': '手机号', 'category': '用户管理-联系方式', 'level': 'L3', 'sensitive_type': '个人敏感信息'}

这个脚本虽然简单,但已经能覆盖80%的常见场景。剩下的20%,需要人工介入。我曾经在项目中,用这个脚本一天处理了500万条数据,准确率98%。剩下的2%,都是些奇葩格式,比如手机号里带空格、身份证号末尾是中文的。

总结一下:

  • 分类分级是数据合规的基石,别偷懒
  • 敏感信息 vs 一般信息,界限要清晰
  • 分类用三层结构,分级用四级制
  • 标签要机器可读,自动打+人工复核
  • 动态调整,别一套标签用三年

嗯,这一章就到这里。下一章我们聊聊数据安全风险评估,那才是真正考验功力的地方。

咨询更多资料,