项目级数据范围定义:项目生命周期、项目内数据隔离、跨项目数据共享边界
1. 边界定义
项目级数据范围位于部门级和子项目级之间,是权限粒度最常聚焦的执行单元。边界受项目生命周期动态调整,并在跨项目协作时产生共享边界。
- 时间边界:从项目立项、开发/实施、运维、到项目终止的数据生命周期。
- 空间边界:项目内所有数据资产(数据库、文件、消息队列、配置)的集合。
- 协作边界:与外部项目共享的数据集及权限策略的交叉点。
| 边界类型 | 定义 | 典型问题 |
|---|---|---|
| 时间边界 | 项目从启用到停用的时间段 | 项目终止后未清理残留数据 |
| 空间边界 | 项目拥有的物理/逻辑存储范围 | 项目间误写对方存储 |
| 协作边界 | 跨项目的数据共享接口 | 共享粒度过粗导致越权 |
2. 分层架构
项目级数据隔离采用三层结构:
- 存储层:物理或逻辑分离(独立数据库/Schema/表前缀)。
- 访问层:基于策略引擎的强制访问控制(MAC),按项目标签过滤请求。
- 共享层:提供受控的跨项目数据交换区域,支持临时授权、视图或数据复制。
最佳实践:推荐使用逻辑隔离(如每个项目一个PostgreSQL Schema)配合共享层的数据网关,兼顾安全与运维效率。
3. 组件职责
| 组件 | 职责 | 部署位置 |
|---|---|---|
| 项目数据仓库 | 存储项目内所有结构化和非结构化数据 | 每个项目独立Schema/集群 |
| 权限策略引擎 | 根据项目上下文(项目ID、角色)裁决数据访问 | 集中式或边车代理 |
| 共享数据网关 | 管理跨项目授权、数据脱敏、审计日志 | 网络边缘(API Gateway侧) |
| 生命周期管理器 | 项目创建时初始化数据库,终止时清理数据并撤销授权 | 控制平面 |
4. 数据流与控制流
- 数据流:用户请求 → 权限策略引擎(校验项目ID) → 项目数据仓库(返回数据)。跨项目共享时,数据流经共享网关执行脱敏和行级过滤。
- 控制流:项目创建 → 自动化创建Schema、角色、配额;项目启用共享 → 设置共享边界策略;项目终止 → 销毁数据并回收权限。
- 信任链路:项目内部服务间通过内部Token(包含项目ID)互信;跨项目通信必须通过共享网关,网关验证双方项目ID并执行授权策略。
5. 选型权衡
| 隔离方案 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 独立数据库 | 物理隔离,安全性最高 | 运维成本高,资源利用率低 | 金融、医疗等强监管 |
| Schema隔离 | 逻辑隔离,管理方便 | 需依赖数据库多租户能力 | 大多数企业级项目 |
| 表前缀/行级过滤 | 共享实例,无需额外创建 | 行级过滤性能开销大,不安全 | 轻量级、内部试验项目 |
风险点:
- 生命周期失效:项目终止后未彻底清理,导致数据泄露或残留授权。
- 共享边界误配:跨项目授权过大,导致A项目可读取B项目核心数据。
- 性能瓶颈:共享网关成为单点故障或吞吐瓶颈。
- 策略冲突:项目内隔离策略与共享策略叠加产生死锁或异常行为。
6. 落地步骤
- 定义项目标识:统一使用UUID或业务编码作为项目ID,注入所有数据写入上下文。
- 设计存储结构:选择Schema隔离,为每个项目创建独立Schema,应用层通过连接字符串或JDBC中的前缀路由。
- 实现权限策略:基于RBAC + 项目ID的ABAC规则,确保所有数据库查询自动附加
WHERE project_id = ?条件。 - 建立共享网关:配置共享数据暴露为REST API View,网关校验请求者项目ID和目标项目ID的授权关系。
- 自动化生命周期:通过CI/CD Pipeline在项目创建时执行初始化脚本,项目终止时执行清理脚本并撤销所有共享策略。
-- 初始化项目时的SQL示例(PostgreSQL)
CREATE SCHEMA IF NOT EXISTS project_abc;
GRANT USAGE ON SCHEMA project_abc TO app_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA project_abc TO app_role;
-- 跨项目共享视图示例
CREATE VIEW shared_data_view AS
SELECT * FROM project_abc.orders WHERE is_public = true;
7. 验收标准
| 验收项 | 验证方法 | 通过条件 |
|---|---|---|
| 项目内数据隔离 | 使用项目A的Token查询项目B的Schema | 返回403或空结果 |
| 数据生命周期 | 终止项目后检查Schema及所有关联共享授权 | Schema和授权记录均被删除 |
| 跨项目共享边界 | 从项目A通过共享网关查询项目B的公开数据 | 只能看到标记为public的行 |
| 性能基准 | 在共享网关压力下模拟1000qps | 延迟<50ms,无错误 |