企业信息化管理系统

EIMS - 助力企业数字化转型

企业信息化系统数据脱敏与隐私保护实践

引言

在企业信息化系统中,存在大量敏感数据包括客户个人信息、财务数据、业务机密等。数据脱敏是保护敏感信息的重要手段,本文介绍企业信息化系统中的数据脱敏与隐私保护实践方案。

敏感数据识别与分类

首先需要识别和分类系统中的敏感数据:

数据类别 典型数据 敏感等级
个人身份信息 身份证号、手机号、邮箱
财务数据 银行账号、工资、交易金额
业务数据 客户名单、供应商报价
系统数据 登录密码、业务配置

数据脱敏规则

根据不同数据类别制定相应的脱敏规则:

// 数据脱敏规则配置
const desensitizationRules = {
  // 身份证号脱敏:显示前3位和后4位
  idCard: {
    pattern: /^(\d{3})\d{11}(\d{4})$/,
    replace: '$1***********$2',
    example: '420***********1234'
  },

  // 手机号脱敏:显示前3位和后4位
  phone: {
    pattern: /^(\d{3})\d{4}(\d{4})$/,
    replace: '$1****$2',
    example: '138****5678'
  },

  // 邮箱脱敏:保留@前第一字符和域名
  email: {
    pattern: /^([a-zA-Z0-9])([a-zA-Z0-9]*)(@[a-zA-Z0-9.]+)$/,
    replace: '$1***$3',
    example: 'w***@example.com'
  },

  // 银行卡号脱敏:显示前4位和后4位
  bankCard: {
    pattern: /^(\d{4})\d+(\d{4})$/,
    replace: '$1****$2',
    example: '6228****1234'
  },

  // 姓名脱敏:保留姓氏
  name: {
    pattern: /^([\u4e00-\u9fa5])([\u4e00-\u9fa5]+)$/,
    replace: '$1*',
    example: '张*'
  },

  // 地址脱敏:只保留省市
  address: {
    pattern: /^([\u4e00-\u9fa5]{2,4})(省|市)([\u4e00-\u9fa5]+)(.*)$/,
    replace: '$1$2***',
    example: '湖北省武汉市***'
  },

  // 金额脱敏:小数点后保留2位
  amount: {
    pattern: /^(\d+)(\.\d{2})$/,
    replace: '$1.00',
    example: '100000.00'
  }
};

脱敏处理实现

在数据展示和导出时自动应用脱敏规则:

// 数据脱敏服务
class DataMaskingService {
  constructor(rules) {
    this.rules = rules;
  }

  // 通用脱敏方法
  mask(data, fieldType) {
    const rule = this.rules[fieldType];
    if (!rule || !data) return data;

    if (rule.pattern) {
      return data.replace(rule.pattern, rule.replace);
    }
    return data;
  }

  // 批量脱敏
  maskBatch(dataList, fieldMappings) {
    return dataList.map(item => {
      const maskedItem = { ...item };
      for (const [field, type] of Object.entries(fieldMappings)) {
        if (maskedItem[field]) {
          maskedItem[field] = this.mask(maskedItem[field], type);
        }
      }
      return maskedItem;
    });
  }

  // 根据配置自动脱敏
  autoMask(data, config) {
    const maskedData = { ...data };
    for (const [field, fieldConfig] of Object.entries(config)) {
      if (!maskedData[field]) continue;

      const { type, level } = fieldConfig;

      // 根据脱敏级别处理
      switch (level) {
        case 'full':
          // 完全脱敏
          maskedData[field] = '***';
          break;
        case 'partial':
          // 部分脱敏
          maskedData[field] = this.mask(maskedData[field], type);
          break;
        case 'none':
          // 不脱敏
          break;
        default:
          maskedData[field] = this.mask(maskedData[field], type);
      }
    }
    return maskedData;
  }
}

权限控制与合规审计

数据脱敏需要配合权限控制和审计机制:

// 脱敏权限控制
class MaskingPermissionService {
  constructor(userModel, dataMaskingService) {
    this.User = userModel;
    this.Masking = dataMaskingService;
  }

  // 检查用户是否有权查看原始数据
  async canViewOriginal(userId, dataCategory) {
    const user = await this.User.findById(userId);

    // 管理员始终可以看到原始数据
    if (user.role === 'admin') return true;

    // 检查用户是否有敏感数据查看权限
    const permissions = user.permissions || [];
    return permissions.includes(`view_original_${dataCategory}`);
  }

  // 根据权限返回脱敏或原始数据
  async getDataWithPermission(userId, data, dataCategory) {
    const canViewOriginal = await this.canViewOriginal(userId, dataCategory);

    if (canViewOriginal) {
      return { data, masked: false };
    }

    // 返回脱敏数据
    const fieldConfig = this.getFieldConfig(dataCategory);
    return {
      data: this.Masking.autoMask(data, fieldConfig),
      masked: true
    };
  }

  // 记录数据访问日志
  async logDataAccess(userId, dataCategory, action, masked) {
    await this.DataAccessLog.create({
      userId,
      dataCategory,
      action,
      masked,
      accessTime: new Date(),
      ip: '获取用户IP'
    });
  }
}

应用场景示例

1. 客服查看客户信息

客服人员只能看到脱敏后的客户信息:

字段 原始数据 脱敏后
姓名 张三 张*
手机号 13812345678 138****5678
身份证号 420105199001011234 420***********1234

2. 数据导出报告

导出的Excel报告中敏感信息自动脱敏,确保外发数据安全。

总结

数据脱敏是企业信息安全的重要环节,核心要点包括:

通过数据脱敏技术,可以在保证业务流程正常运行的同时,有效保护敏感信息不被泄露。

← 下一篇:企业信息化系统容器化部署实践