数据源类型与分类

做数据安全策略配置,第一件事就是认清你面对的数据源长什么样。我做了这么多年安全项目,发现很多人上来就写对接代码,结果连数据源是结构化的还是非结构化的都没分清楚——策略写出来要么漏检,要么误报满天飞。

其实分清楚并不难。咱们按数据组织形式,把常见数据源分成三大类:结构化、半结构化、非结构化。这张图能帮你快速建立整体印象:

数据源分类与接入方式框架 数据源分类与接入方式概览 结构化数据源 半结构化数据源 非结构化数据源 关系型数据库 (MySQL, Oracle) 数仓 (Snowflake, BigQuery) JSON / XML / YAML 日志 / 事件流 (Kafka) 文档 (PDF, Word) 图片 / 音视频文件 常用接入方式 Batch 批量同步 Stream 实时流 API / SDK 拉取 手动上传 💡 说明 • 结构化数据源通常用 Batch 或 JDBC/ODBC 接口接入,适合定时全量/增量同步。 • 半结构化数据源(如 Kafka 日志)最适合 Stream 实时接入,也支持 Batch。 • 非结构化数据源常用 API 拉取或手动上传,批量扫描做敏感内容识别。 • 实际对接时经常混合使用多种方式,比如先用 Batch 做全量,再用 Stream 做增量。

结构化数据源

说白了,就是那些能用二维表存的数据。行和列规则统一,字段类型固定。典型的比如 MySQL、PostgreSQL、Oracle,还有云数仓像 Snowflake、Redshift。

这类数据源对接起来最省心——SQL 一把梭就行。但我曾经碰过一个客户,Oracle 里有个几百字段的大宽表,他们用 JDBC 直接拉全量,结果把源库拖挂了。嗯,后面改了分批+游标才搞定。

  • 存储模式:强 schema,数据严格按表结构存储。
  • 对接方式:JDBC/ODBC 连接,支持 SQL 查询。
  • 常见风险:大表全量扫描影响生产库性能。

我的建议:对接生产库时,优先走只读副本或数据网关。如果只能直连,务必加上LIMIT和游标,避免一次读取量过大。

半结构化数据源

这类数据源自带描述结构,但不像关系表那么死板。常见的 JSON、XML、YAML 文件,还有 Kafka 里的消息、Elasticsearch 的文档。数据里可能有嵌套数组、可选字段,结构可以随时变。

对接半结构化数据,难点在于 schema 演化。我记得有一个项目对接 Kafka JSON 日志,上游团队突然在一个字段里加了新嵌套对象,我们的解析器直接报错了。后来我养成了一个习惯——先做 schema 采样,再设置容错策略。

对比项 结构化 半结构化 非结构化
Schema 固定 灵活(self-describing) 无固定结构
查询能力 SQL 强大 部分支持(如 JSONPath) 关键词/全文检索
典型例子 MySQL 表 Kafka 消息、日志 PDF、图片
敏感数据发现 正则+字段名匹配 正则+层级路径匹配 OCR、NLP、文本提取

非结构化数据源

这类数据没有内在的结构,或者说结构藏在内容里。比如 Word 文档、PDF、Excel 报表、图片、视频、音频。安全策略要做的是从这些文件里提取出文本,然后做敏感内容识别。

做非结构化数据对接,最头疼的是格式多样性。光 PDF 就有扫描版和文字版,图片还得上 OCR。我曾经对接一个文件服务器,里面混了 20 多种格式,写解析器写了整整两周。后来发现直接用成熟的文档解析库(比如 Apache Tika)比自己造轮子靠谱太多。

  • 存储模式:文件系统、对象存储(S3、OSS)、NAS。
  • 对接方式:文件清单扫描 + 批量解析 / 流式解析。
  • 常见风险:图片 OCR 识别率不足、加密文档无法解析。

避坑指南:我曾经遇到过客户把图片里的身份证号当水印处理,OCR 根本读不出来。后来我们加了预处理步骤(去噪、二值化)才勉强可用。如果你的非结构化数据量大,建议先做小样本测试,评估召回率,别一上来就跑全量。

数据源接入方式概览

对接数据源,说白了就是怎么把数据从源头搬到 DSPM 平台。我习惯按实时性和传输方式分成四类:

  1. Batch 批量同步:定时(每日/小时)拉取全量或增量数据。适合对实时性要求不高的结构化源和数据仓库。工具常用 Sqoop、DataX、Airflow。
  2. Stream 实时流:通过 Kafka、Kinesis、Pulsar 等消息队列持续消费数据。适合日志、事件流等半结构化数据。
  3. API/SDK 拉取:调用数据源提供的 REST 或 gRPC 接口获取数据。像 Salesforce、SaaS 应用常用这种。
  4. 手动上传/拖拽:数据团队临时把文件扔到固定目录(S3 bucket、FTP),平台自动扫描。适合小批量非结构化文件。

选型关键因素:实时性要求、数据量级、源端压力。通常一个数据源可以同时支持多种接入方式。比如全量历史数据用 Batch 拉,增量用 Stream 接。我个人的建议是——先评估源端能承受的请求量,再做接入方式组合。

举个例子,假设有一个 MySQL 数据库要对接:

# 全量历史数据(Batch)
通过 JDBC 导出到 CSV,再 Bulk Load 到 DSPM 存储。
注意导出时使用 LIMIT + OFFSET 分页,避免锁表。

# 增量数据(Stream)
开启 Binlog 解析(Debezium),将变更事件写入 Kafka,
再由消费者实时写入 DSPM 平台。

这样既能保证全量基线准确,又能捕获实时变化。但注意,Binlog 解析需要开启 MySQL 的 row-based replication,并且会有一定的存储开销。我踩过一次坑:生产库没开 Binlog,增量方案全废,只能重新做全量。