用户敏感信息库表:AES密文 + sha256指纹去重 + org/user双维归属 + 使用计数。 DDL 由 json2ddl 在测试机实跑生成后手工调整为幂等形态(去DROP、CREATE TABLE IF NOT EXISTS、PRIMARY KEY 内联);json2ddl 不生成索引 → 3条 CREATE INDEX IF NOT EXISTS 手写(同 m0035 做法)。唯一索引 (org_id,user_id,name)。 ID 撞号检查通过(35文件35唯一id)。表定义源 models JSON 在 pipeline-service。
30 lines
2.4 KiB
JSON
30 lines
2.4 KiB
JSON
{
|
|
"id": "m0037",
|
|
"title": "用户敏感信息管理模块(2026-09-17): 新建pipeline_user_secrets表——RC4/AES密文入库、会话占位符引用@@sec:NAME@@、入站自动侦测、AgentIO钥匙图标选择窗、v1角色agent继承(项目owner身份)、执行边界env注入子进程(不进命令字符串)。json2ddl实跑验证(测试机2026-09-17)",
|
|
"backup_tables": [],
|
|
"up": [
|
|
{
|
|
"op": "sql",
|
|
"sql": "CREATE TABLE IF NOT EXISTS pipeline_user_secrets (\n `id` VARCHAR(32) NOT NULL comment '主键ID',\n `name` VARCHAR(64) NOT NULL comment '变量名',\n `label` VARCHAR(128) NOT NULL comment '显示名称',\n `secret_type` VARCHAR(32) NOT NULL DEFAULT 'other' comment '类型',\n `encrypted_value` longtext NOT NULL comment '密文值',\n `fingerprint` VARCHAR(64) NOT NULL comment '指纹',\n `prefix_hint` VARCHAR(32) NOT NULL comment '前缀提示',\n `length_hint` int NOT NULL DEFAULT '0' comment '长度',\n `org_id` VARCHAR(32) NOT NULL comment '机构ID',\n `user_id` VARCHAR(32) NOT NULL comment '用户ID',\n `source` VARCHAR(32) NOT NULL DEFAULT 'manual' comment '来源',\n `status` VARCHAR(16) NOT NULL DEFAULT 'active' comment '状态',\n `remark` VARCHAR(480) NOT NULL comment '备注',\n `use_count` int NOT NULL DEFAULT '0' comment '使用次数',\n `last_used_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '最近使用时间',\n `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL comment '创建时间',\n `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL comment '更新时间(写入方显式NOW(),新机无ON UPDATE,平台约定)',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment '用户敏感信息表(2026-09-17建表,写入方secret_vault.py与gateway入站门禁自动侦测,RC4/AES加密,会话占位符@@sec:NAME@@引用)'"
|
|
},
|
|
{
|
|
"op": "sql",
|
|
"sql": "CREATE INDEX IF NOT EXISTS pipeline_user_secrets_idx_org_user_name ON pipeline_user_secrets(org_id, user_id, name)"
|
|
},
|
|
{
|
|
"op": "sql",
|
|
"sql": "CREATE INDEX IF NOT EXISTS pipeline_user_secrets_idx_fingerprint ON pipeline_user_secrets(fingerprint)"
|
|
},
|
|
{
|
|
"op": "sql",
|
|
"sql": "CREATE INDEX IF NOT EXISTS pipeline_user_secrets_idx_user_status ON pipeline_user_secrets(user_id, status)"
|
|
}
|
|
],
|
|
"down": [
|
|
{
|
|
"op": "sql",
|
|
"sql": "DROP TABLE IF EXISTS pipeline_user_secrets"
|
|
}
|
|
]
|
|
}
|