diff --git a/deploy/migrations/m0037_pipeline_user_secrets.json b/deploy/migrations/m0037_pipeline_user_secrets.json new file mode 100644 index 0000000..d4ee6b1 --- /dev/null +++ b/deploy/migrations/m0037_pipeline_user_secrets.json @@ -0,0 +1,29 @@ +{ + "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" + } + ] +}