数据库设计说明书

项目名称: sup-iam 身份识别与访问管理系统

编写人: 沈冬法

日期: 2025年12月15日

版本号: V1.0


1.设计目标与约束

1.1 设计目标

  • 持久化存储元数据
  • 高效的数据查询
  • 安全的数据存储
  • 可审计的数据处理
  • 可演进的表结构

1.2 设计约束

  • 确保明文存储的SK的安全

2.核心实体关系

我们有三大核心实体

  • User:控制面的登录用户
  • Secret: 密钥资源
  • Policy:权限资源

和一大实体关系

  • Secret和Policy的m:n绑定关系

3.表设计说明

3.1 users表(User)

字段设计表

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
instanceID 变字符串 跨域uud 32位 唯一键
username 可变字符串 用户名 255位 唯一键,非空
nickname 可变字符串 昵称 30位 非空
isEnable tinyint 账户是否启用, 1可用,0不可用 1位 非空
phone 可变字符串 手机号 20位 默认为空
email 可变字符串 邮箱 256位 默认为空
isAdmin tinyint 是否有管理员权限 1位 默认为0
extandShadow longtext 拓展字段 不超过longtext 默认为空
loggedAt timestamp 登录时间 时间戳长度 默认为空
createdAt timestamp 创建时间 时间戳长度 非空
updatedAt timestamp 更新时间 时间戳长度 非空

3.2 secrets表(Secret)

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
instanceID 变字符串 跨域uud 32位 唯一键
userID bigint 所属用户id 20位 外键,索引键,非空
username 可变字符串 username 字段为冗余展示字段,实际逻辑关联关系基于 userID 255位 外键, 非空
accessKey 可变字符串 密钥ID 36位 唯一键,非空
secretKey 可变字符串 私钥 255位 非空
expires int 过期时间,使用 Unix Timestamp(秒级) 64位 默认1534308590
description 可变字符串 密钥描述 255位 默认为空
extendShadow longtext 拓展字段 不超过longtext 默认为空
createdAt timestamp 创建时间 时间戳长度 非空
updatedAt timestamp 更新时间 时间戳长度 非空

3.3 policies策略表(Policy)

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
instanceID 变字符串 跨域uud 32位 唯一键
name 可变字符串 策略名称 64位 非空
username 可变字符串 所属用户名 255位 外键,索引键,非空
description 可变字符串 密钥描述 255位 默认为空
policyShadow longtext 策略描述影子字段 不超过longtext 默认为空
extendShadow longtext 拓展字段 不超过longtext 默认为空
createdAt timestamp 创建时间 时间戳长度 非空
updatedAt timestamp 更新时间 时间戳长度 非空

3.4 secret_policy_binding绑定表

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
secretID bigint 密钥ID 20位 外键
policyID bigint 策略ID 20位 外键
username 可变字符串 所属用户名 255位 外键,索引键,非空
extendShadow longtext 拓展字段 不超过longtext 默认为空
createdAt timestamp 创建时间 时间戳长度 非空

3.5 secret_policy_binding_autid绑定审计表

该表用于记录 绑定关系 的删除、更新历史快照,用于审计与回溯,不参与在线鉴权。

(secretID, policyID) 组合应具备唯一性约束,防止重复绑定。

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
secretID bigint 密钥ID 20位 外键
policyID bigint 策略ID 20位 外键
username 可变字符串 所属用户名 255位 外键,索引键,非空
extendShadow longtext 拓展字段 不超过longtext 默认为空
createdAt timestamp 创建时间 时间戳长度 非空

3.6 policies_audit策略审计表(Policy Audit)

该表用于记录 Policy 的删除、更新历史快照,用于审计与回溯,不参与在线鉴权。

名称 类型 业务 规模 约束和性质
id bigint 自增主键 20位 主键,自增
instanceID 变字符串 跨域uud 32位 唯一键
name 可变字符串 策略名称 64位 非空
username 可变字符串 所属用户名 255位 外键,索引键,非空
description 可变字符串 密钥描述 255位 默认为空
policyShadow longtext 策略描述影子字段 不超过longtext 默认为空
extendShadow longtext 拓展字段 不超过longtext 默认为空
createdAt timestamp 创建时间 时间戳长度 非空
updatedAt timestamp 更新时间 时间戳长度 非空

4. 安全字段

4.1 用户密码字段

  • 密码字段仅用于 IAM 控制面用户的身份认证

  • 不参与任何数据面鉴权流程

  • 设计原则:

    • 使用不可逆哈希算法存储(如 bcrypt)
    • 数据库中不存储明文密码
    • 禁止任何形式的密码回显

4.2 secretKey 字段

Secret Key 为系统中最高敏感级别数据,用于数据面鉴权请求签名校验。

  • 当前版本设计说明
    • Secret Key 以明文形式存储于数据库
    • Auth Server 在鉴权流程中可访问该字段
    • IAM 管理服务不直接参与鉴权计算
  • 安全约束:
    +Secret Key仅在创建或重置时返回一次
    • 日志、缓存、审计数据中禁止记录 Secret Key
    • 数据库访问需处于可信网络环境中
  • 演进方向(非本版本目标):
    • 引入 KMS 对 Secret Key 进行加密存储
    • 或采用不可逆派生存储(HMAC 派生值)替代明文存储,但是会导致鉴权过于复杂

4.3 Shadow / Extend 字段安全约束

policyShadowextendShadow 等字段用于承载策略 DSL 或扩展元数据。

设计约束:

  • Shadow 字段内容不参与数据库级别逻辑判断
  • 解析失败的策略在鉴权时应被视为拒绝(Deny)
  • Shadow 字段中不得包含 Secret Key、AccessKey 等敏感信息

4.4 审计表安全设计

审计表用于记录历史状态快照,不参与在线鉴权。

设计原则:

  • 审计数据只写不改
  • 不允许审计表回写主业务表
  • 审计数据中禁止出现 Secret Key 等高敏感字段