-- ============================================================= -- xiaoqu-agent-service 自有库初始化(dev 环境) -- 设计文档:doc/agent-mcp-service-design.md §7 -- 执行:mysql -h192.168.1.181 -uroot -p < sql/V1__init.sql -- ============================================================= CREATE DATABASE IF NOT EXISTS xiaoqu_agent_svc_d DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE xiaoqu_agent_svc_d; -- token(ak):属于某个人(user_id 逻辑关联 m0.user),只存 SHA-256 哈希 CREATE TABLE IF NOT EXISTS agent_api_key ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', user_id BIGINT NOT NULL COMMENT '所属人(m0.user.id)', key_prefix VARCHAR(16) NOT NULL COMMENT 'ak 前缀(展示用,如 xqak_abcd1234)', key_hash CHAR(64) NOT NULL COMMENT 'ak 明文 SHA-256 hex', memo VARCHAR(255) NULL COMMENT '用途备注(如 Kimi 用 / Claude 用)', status TINYINT NOT NULL DEFAULT 1 COMMENT '1=正常 0=禁用', expire_time DATETIME NULL COMMENT '过期时间,NULL=永久有效', last_used_time DATETIME NULL COMMENT '最后使用时间', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_key_hash (key_hash), KEY idx_user_id (user_id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='API token(ak)'; -- 作用域(避免使用疑似关键字的 scope 作为表名,定名 agent_scope) CREATE TABLE IF NOT EXISTS agent_scope ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', name VARCHAR(64) NOT NULL COMMENT '作用域名称(如 运营)', code VARCHAR(64) NOT NULL COMMENT '作用域编码(如 operation)', memo VARCHAR(255) NULL COMMENT '备注', status TINYINT NOT NULL DEFAULT 1 COMMENT '1=启用 0=停用', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_code (code) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='作用域(工具集合)'; -- 工具注册表:启动时由服务端注册自动同步(只插不删) CREATE TABLE IF NOT EXISTS tool ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', name VARCHAR(128) NOT NULL COMMENT '工具名(如 agent.list.query)', category VARCHAR(64) NOT NULL COMMENT '分类(代码注册时声明,如 customer/system)', description VARCHAR(512) NULL COMMENT '工具描述', kind VARCHAR(8) NOT NULL DEFAULT 'read' COMMENT 'read=读 write=写', status TINYINT NOT NULL DEFAULT 1 COMMENT '1=启用 0=停用(全局紧急开关)', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_name (name) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='工具注册表'; -- 作用域-工具 CREATE TABLE IF NOT EXISTS scope_tool ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', scope_id BIGINT NOT NULL COMMENT 'agent_scope.id', tool_id BIGINT NOT NULL COMMENT 'tool.id', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_scope_tool (scope_id, tool_id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='作用域-工具关系'; -- token-作用域 CREATE TABLE IF NOT EXISTS token_scope ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', token_id BIGINT NOT NULL COMMENT 'agent_api_key.id', scope_id BIGINT NOT NULL COMMENT 'agent_scope.id', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_token_scope (token_id, scope_id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='token-作用域关系'; -- 审计日志 CREATE TABLE IF NOT EXISTS audit_log ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', user_id BIGINT NULL COMMENT '调用人(m0.user.id)', token_id BIGINT NULL COMMENT 'agent_api_key.id', tool_name VARCHAR(128) NOT NULL COMMENT '工具名', params_digest VARCHAR(500) NULL COMMENT '入参 JSON 摘要(截断 500 字,不含 ak)', result_status VARCHAR(16) NOT NULL COMMENT 'success/denied/error', result_message VARCHAR(500) NULL COMMENT '结果说明(拒绝原因/异常摘要)', cost_ms BIGINT NULL COMMENT '耗时毫秒', client_ip VARCHAR(64) NULL COMMENT '客户端 IP', client_type VARCHAR(32) NULL COMMENT 'mcp-kimi/mcp-claude/cli/unknown', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), KEY idx_user_tool (user_id, tool_name), KEY idx_create_time (create_time) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='工具调用审计'; -- 后台管理员(P4 管理后台使用,与 ak 体系分离) CREATE TABLE IF NOT EXISTS admin_user ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', account VARCHAR(64) NOT NULL COMMENT '登录账号', password_hash VARCHAR(255) NOT NULL COMMENT 'PBKDF2 加盐密码哈希', name VARCHAR(64) NULL COMMENT '姓名', status TINYINT NOT NULL DEFAULT 1 COMMENT '1=正常 0=禁用', create_id BIGINT NULL COMMENT '创建人', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', modify_id BIGINT NULL COMMENT '修改人', modify_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', soft_delete TINYINT NOT NULL DEFAULT 0 COMMENT '0=正常 1=删除', PRIMARY KEY (id), UNIQUE KEY uk_account (account) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='后台管理员';