数据源类型与分类
做数据安全策略配置,第一件事就是认清你面对的数据源长什么样。我做了这么多年安全项目,发现很多人上来就写对接代码,结果连数据源是结构化的还是非结构化的都没分清楚——策略写出来要么漏检,要么误报满天飞。
其实分清楚并不难。咱们按数据组织形式,把常见数据源分成三大类:结构化、半结构化、非结构化。这张图能帮你快速建立整体印象:
结构化数据源
说白了,就是那些能用二维表存的数据。行和列规则统一,字段类型固定。典型的比如 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 平台。我习惯按实时性和传输方式分成四类:
- Batch 批量同步:定时(每日/小时)拉取全量或增量数据。适合对实时性要求不高的结构化源和数据仓库。工具常用 Sqoop、DataX、Airflow。
- Stream 实时流:通过 Kafka、Kinesis、Pulsar 等消息队列持续消费数据。适合日志、事件流等半结构化数据。
- API/SDK 拉取:调用数据源提供的 REST 或 gRPC 接口获取数据。像 Salesforce、SaaS 应用常用这种。
- 手动上传/拖拽:数据团队临时把文件扔到固定目录(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,增量方案全废,只能重新做全量。