feat:升级功能、密码卡框架、主密钥接口
This commit is contained in:
+292
-48
@@ -1,70 +1,314 @@
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- TMS 基础库结构(TiDB/MySQL)
|
||||
-- 适用范围:当前已实现的初始化任务、步骤、设备节点、用户表
|
||||
-- TMS 最终库结构初始化脚本
|
||||
-- 适用范围:新库初始化
|
||||
-- 数据库:TiDB / MySQL 8+
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. 本文件按当前项目最终表结构整理,适合“空库初始化”。
|
||||
-- 2. 不再按 V1-V11 逐步执行 ALTER / RENAME,避免初始化时出现兼容性问题。
|
||||
-- 3. 若用于已有库升级,请继续使用 Flyway migration,而不是本文件。
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
-- 1) 建库(如已存在则跳过)
|
||||
CREATE DATABASE IF NOT EXISTS tms
|
||||
DEFAULT CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_general_ci;
|
||||
|
||||
USE tms;
|
||||
|
||||
-- 2) 初始化任务主表
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 初始化任务
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_init_task (
|
||||
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
||||
task_id VARCHAR(64) NOT NULL COMMENT '任务业务ID',
|
||||
version VARCHAR(32) NOT NULL COMMENT 'CIPS版本',
|
||||
status VARCHAR(32) NOT NULL COMMENT '任务状态',
|
||||
product_type VARCHAR(16) NULL COMMENT '产品版本: enterprise/interbank/lite_direct',
|
||||
org_code VARCHAR(32) NULL COMMENT '机构号',
|
||||
mq_type VARCHAR(32) NULL COMMENT '消息队列类型',
|
||||
deploy_mode VARCHAR(16) NULL COMMENT '部署模式: single/double/four',
|
||||
init_plan_json LONGTEXT NULL COMMENT '初始化计划快照(JSON)',
|
||||
create_time DATETIME(3) NOT NULL COMMENT '创建时间',
|
||||
update_time DATETIME(3) NOT NULL COMMENT '更新时间',
|
||||
id BIGINT PRIMARY KEY,
|
||||
task_id VARCHAR(64) NOT NULL,
|
||||
task_type VARCHAR(32) NOT NULL DEFAULT 'INIT' COMMENT '任务类型:INIT/RESET',
|
||||
version VARCHAR(32) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
product_type VARCHAR(16) NULL,
|
||||
org_code VARCHAR(32) NULL,
|
||||
mq_type VARCHAR(32) NULL,
|
||||
deploy_mode VARCHAR(16) NULL,
|
||||
init_plan_json LONGTEXT NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_init_task_task_id (task_id)
|
||||
) COMMENT='初始化任务表';
|
||||
);
|
||||
|
||||
-- 3) 初始化任务步骤表
|
||||
CREATE TABLE IF NOT EXISTS tms_init_task_step (
|
||||
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
||||
task_id VARCHAR(64) NOT NULL COMMENT '任务业务ID',
|
||||
step_no INT NOT NULL COMMENT '步骤序号',
|
||||
step_code VARCHAR(64) NOT NULL COMMENT '步骤编码',
|
||||
status VARCHAR(32) NOT NULL COMMENT '步骤状态',
|
||||
message VARCHAR(512) NULL COMMENT '步骤信息',
|
||||
command_line VARCHAR(2048) NULL COMMENT '实际执行命令',
|
||||
log_path VARCHAR(512) NULL COMMENT '日志文件路径',
|
||||
exit_code INT NULL COMMENT '命令退出码',
|
||||
create_time DATETIME(3) NOT NULL COMMENT '创建时间',
|
||||
update_time DATETIME(3) NOT NULL COMMENT '更新时间',
|
||||
id BIGINT PRIMARY KEY,
|
||||
task_id VARCHAR(64) NOT NULL,
|
||||
step_no INT NOT NULL,
|
||||
step_code VARCHAR(64) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
message VARCHAR(512) NULL,
|
||||
command_line VARCHAR(2048) NULL,
|
||||
log_path VARCHAR(512) NULL,
|
||||
exit_code INT NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_init_task_step_task_no (task_id, step_no),
|
||||
KEY idx_tms_init_task_step_task_id (task_id)
|
||||
) COMMENT='初始化任务步骤表';
|
||||
);
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 认证与设备基础表
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
-- 4) 系统用户表(简化)
|
||||
CREATE TABLE IF NOT EXISTS tms_auth_user (
|
||||
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
||||
username VARCHAR(64) NOT NULL COMMENT '用户名',
|
||||
display_name VARCHAR(128) NOT NULL COMMENT '显示名',
|
||||
role VARCHAR(64) NOT NULL COMMENT '角色',
|
||||
create_time DATETIME(3) NOT NULL COMMENT '创建时间',
|
||||
update_time DATETIME(3) NOT NULL COMMENT '更新时间',
|
||||
id BIGINT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL,
|
||||
display_name VARCHAR(128) NOT NULL,
|
||||
role VARCHAR(64) NOT NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_auth_user_username (username)
|
||||
) COMMENT='系统用户表';
|
||||
);
|
||||
|
||||
-- 5) 设备节点表
|
||||
CREATE TABLE IF NOT EXISTS tms_device_node (
|
||||
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
||||
node_id VARCHAR(64) NOT NULL COMMENT '节点业务ID',
|
||||
host VARCHAR(128) NOT NULL COMMENT '节点主机地址',
|
||||
status VARCHAR(32) NOT NULL COMMENT '节点状态',
|
||||
create_time DATETIME(3) NOT NULL COMMENT '创建时间',
|
||||
update_time DATETIME(3) NOT NULL COMMENT '更新时间',
|
||||
id BIGINT PRIMARY KEY,
|
||||
node_id VARCHAR(64) NOT NULL,
|
||||
host VARCHAR(128) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_device_node_node_id (node_id)
|
||||
) COMMENT='设备节点表';
|
||||
);
|
||||
|
||||
-- 6) 可选初始化数据(按需启用)
|
||||
-- INSERT INTO tms_auth_user (id, username, display_name, role, create_time, update_time)
|
||||
-- VALUES (10001, 'admin', '系统管理员', 'ADMIN', NOW(3), NOW(3));
|
||||
CREATE TABLE IF NOT EXISTS tms_file_record (
|
||||
id BIGINT PRIMARY KEY,
|
||||
file_id VARCHAR(64) NOT NULL,
|
||||
original_filename VARCHAR(255) NOT NULL,
|
||||
storage_path VARCHAR(1024) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_file_record_file_id (file_id)
|
||||
);
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 设备软件版本
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_device_software_version (
|
||||
id BIGINT PRIMARY KEY,
|
||||
component_code VARCHAR(64) NOT NULL,
|
||||
component_name VARCHAR(128) NOT NULL,
|
||||
current_version VARCHAR(128) NOT NULL,
|
||||
source_type VARCHAR(32) NOT NULL,
|
||||
detected_at DATETIME NULL,
|
||||
remarks VARCHAR(255) NULL,
|
||||
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_tms_device_software_version_component_code (component_code)
|
||||
);
|
||||
|
||||
INSERT INTO tms_device_software_version
|
||||
(id, component_code, component_name, current_version, source_type, detected_at, remarks)
|
||||
VALUES
|
||||
(1001, 'RABBITMQ', '消息队列', 'RabbitMQ V3.8.21', 'MANUAL', NOW(), '出厂预置'),
|
||||
(1002, 'TLQ', '消息队列', 'tonglink/Q V8.1.11', 'MANUAL', NOW(), '出厂预置'),
|
||||
(1003, 'TIDB', '数据库', 'TiDB V8.1.0', 'MANUAL', NOW(), '出厂预置'),
|
||||
(1004, 'NGINX', 'Nginx', 'Nginx V1.20', 'MANUAL', NOW(), '出厂预置'),
|
||||
(1005, 'APP', '标准收发器企业版', '标准收发器企业版 V1.3.2', 'MANUAL', NOW(), '出厂预置'),
|
||||
(1006, 'TMS', 'CISD终端管理服务', 'CISD终端管理服务 V1.0.0', 'MANUAL', NOW(), '出厂预置')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
component_name = VALUES(component_name),
|
||||
current_version = VALUES(current_version),
|
||||
source_type = VALUES(source_type),
|
||||
detected_at = VALUES(detected_at),
|
||||
remarks = VALUES(remarks),
|
||||
update_time = CURRENT_TIMESTAMP;
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 升级任务
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS t_upgrade_task (
|
||||
id BIGINT PRIMARY KEY,
|
||||
task_id VARCHAR(64) NOT NULL,
|
||||
upgrade_mode VARCHAR(16) NOT NULL,
|
||||
target_component VARCHAR(32) NOT NULL,
|
||||
package_file_id VARCHAR(64) NOT NULL,
|
||||
package_name VARCHAR(255) NOT NULL,
|
||||
package_hash VARCHAR(128) NOT NULL,
|
||||
current_version VARCHAR(64) NOT NULL,
|
||||
target_version VARCHAR(64) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
verify_passed TINYINT(1) NOT NULL DEFAULT 0,
|
||||
verify_message VARCHAR(1024) NULL,
|
||||
manifest_json TEXT NULL,
|
||||
detail_log_path VARCHAR(1024) NULL,
|
||||
error_message VARCHAR(1024) NULL,
|
||||
operator VARCHAR(64) NULL,
|
||||
started_at DATETIME(3) NULL,
|
||||
finished_at DATETIME(3) NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_t_upgrade_task_task_id (task_id),
|
||||
KEY idx_t_upgrade_task_status (status),
|
||||
KEY idx_t_upgrade_task_component (target_component),
|
||||
KEY idx_t_upgrade_task_create_time (create_time)
|
||||
);
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 新认证体系
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_role_account (
|
||||
id BIGINT PRIMARY KEY,
|
||||
role_code VARCHAR(64) NOT NULL,
|
||||
display_name VARCHAR(128) NOT NULL,
|
||||
required_ukey_count INT NOT NULL,
|
||||
password_hash VARCHAR(256) NOT NULL,
|
||||
password_salt VARCHAR(128) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
need_change_password TINYINT(1) NOT NULL DEFAULT 1,
|
||||
failed_count INT NOT NULL DEFAULT 0,
|
||||
locked_until DATETIME(3) NULL,
|
||||
last_login_at DATETIME(3) NULL,
|
||||
last_active_at DATETIME(3) NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_role_account_role_code (role_code)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_role_ukey_binding (
|
||||
id BIGINT PRIMARY KEY,
|
||||
role_code VARCHAR(64) NOT NULL,
|
||||
slot_no INT NOT NULL,
|
||||
ukey_serial VARCHAR(128) NOT NULL,
|
||||
ukey_pubkey TEXT NOT NULL,
|
||||
issuer_sign TEXT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
bound_at DATETIME(3) NOT NULL,
|
||||
unbound_at DATETIME(3) NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_role_ukey_binding_role_slot (role_code, slot_no),
|
||||
KEY idx_tms_role_ukey_binding_role_status (role_code, status)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_auth_session (
|
||||
id BIGINT PRIMARY KEY,
|
||||
session_token VARCHAR(128) NOT NULL,
|
||||
role_code VARCHAR(64) NOT NULL,
|
||||
auth_level VARCHAR(32) NOT NULL,
|
||||
issued_at DATETIME(3) NOT NULL,
|
||||
last_active_at DATETIME(3) NOT NULL,
|
||||
expires_at DATETIME(3) NOT NULL,
|
||||
logout_at DATETIME(3) NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_auth_session_token (session_token),
|
||||
KEY idx_tms_auth_session_role_code (role_code)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_auth_challenge (
|
||||
id BIGINT PRIMARY KEY,
|
||||
challenge_id VARCHAR(128) NOT NULL,
|
||||
role_code VARCHAR(64) NOT NULL,
|
||||
purpose VARCHAR(32) NOT NULL,
|
||||
nonce VARCHAR(256) NOT NULL,
|
||||
expires_at DATETIME(3) NOT NULL,
|
||||
used TINYINT(1) NOT NULL DEFAULT 0,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
UNIQUE KEY uk_tms_auth_challenge_challenge_id (challenge_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tms_auth_audit_log (
|
||||
id BIGINT PRIMARY KEY,
|
||||
event_type VARCHAR(64) NOT NULL,
|
||||
role_code VARCHAR(64) NULL,
|
||||
operator_role_code VARCHAR(64) NULL,
|
||||
result VARCHAR(32) NOT NULL,
|
||||
detail_json JSON NULL,
|
||||
remote_ip VARCHAR(64) NULL,
|
||||
create_time DATETIME(3) NOT NULL,
|
||||
update_time DATETIME(3) NOT NULL,
|
||||
KEY idx_tms_auth_audit_log_event_type (event_type),
|
||||
KEY idx_tms_auth_audit_log_role_code (role_code)
|
||||
);
|
||||
|
||||
INSERT IGNORE INTO tms_role_account (
|
||||
id,
|
||||
role_code,
|
||||
display_name,
|
||||
required_ukey_count,
|
||||
password_hash,
|
||||
password_salt,
|
||||
status,
|
||||
need_change_password,
|
||||
failed_count,
|
||||
locked_until,
|
||||
last_login_at,
|
||||
last_active_at,
|
||||
create_time,
|
||||
update_time
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
11001,
|
||||
'SUPER_ADMIN',
|
||||
'超级管理员',
|
||||
3,
|
||||
'Viuew8WE+qziUZwGGU0x25cUpzsTF+QvQFU0uhb+yVA=',
|
||||
'init-super-admin-salt-20260325',
|
||||
'UNENABLED',
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
CURRENT_TIMESTAMP(3),
|
||||
CURRENT_TIMESTAMP(3)
|
||||
),
|
||||
(
|
||||
11002,
|
||||
'KEY_ADMIN',
|
||||
'密钥管理员',
|
||||
2,
|
||||
'/xqmDy3A/q9X5p7XWznIPSBabQ6bxTLAPgtHQ6Be33c=',
|
||||
'init-key-admin-salt-20260325',
|
||||
'ACTIVE',
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
CURRENT_TIMESTAMP(3),
|
||||
CURRENT_TIMESTAMP(3)
|
||||
),
|
||||
(
|
||||
11003,
|
||||
'AUDIT_ADMIN',
|
||||
'审计管理员',
|
||||
1,
|
||||
'j/J1LKyUOzVEJfbbHe2dwKBKNdabRk502olk/LWIwhg=',
|
||||
'init-audit-admin-salt-20260325',
|
||||
'UNENABLED',
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
CURRENT_TIMESTAMP(3),
|
||||
CURRENT_TIMESTAMP(3)
|
||||
),
|
||||
(
|
||||
11004,
|
||||
'OPS_ADMIN',
|
||||
'运维管理员',
|
||||
1,
|
||||
'2e9F4aCgsDb+AuD1LrBEqEg8yjy3ODo27UHtx06vj/A=',
|
||||
'init-ops-admin-salt-20260325',
|
||||
'UNENABLED',
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
CURRENT_TIMESTAMP(3),
|
||||
CURRENT_TIMESTAMP(3)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
# TMS 初始化 SQL 执行说明
|
||||
|
||||
当前推荐使用 [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql)。
|
||||
|
||||
这份脚本已经整理成“最终库结构初始化版”,适合空库直接初始化,不再按 migration 逐步执行 `ALTER / RENAME`。
|
||||
|
||||
如果你在 TiDB 客户端里一次性执行整份文件,出现下面这类报错:
|
||||
|
||||
```text
|
||||
SQL Error [8130] [HY000]: client has multi-statement capability disabled
|
||||
```
|
||||
|
||||
这不是 SQL 内容本身错误,而是“客户端把整份脚本作为一次多语句请求发送”,而当前 TiDB 连接未开启 multi-statement。
|
||||
|
||||
## 推荐做法
|
||||
|
||||
### 方式一:用脚本执行模式运行最终初始化脚本
|
||||
|
||||
优先用客户端的 `Run Script` / `Execute Script` 模式执行:
|
||||
|
||||
- [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql)
|
||||
|
||||
### 方式二:用“脚本执行”而不是“单次执行”
|
||||
|
||||
如果你的客户端支持 `Run Script` / `Execute Script`,优先用脚本模式。
|
||||
脚本模式通常会把每条语句分开发送,而不是整份文件一次发给数据库。
|
||||
|
||||
### 方式三:使用命令行客户端导入
|
||||
|
||||
例如:
|
||||
|
||||
```bash
|
||||
mysql -h <host> -P <port> -u <user> -p tms < /path/to/tms_schema_full.sql
|
||||
```
|
||||
|
||||
或者先登录后:
|
||||
|
||||
```sql
|
||||
source /path/to/tms_schema_full.sql;
|
||||
```
|
||||
|
||||
### 方式四:实在只能单条执行时
|
||||
|
||||
先执行:
|
||||
|
||||
```sql
|
||||
CREATE DATABASE IF NOT EXISTS tms
|
||||
DEFAULT CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_general_ci;
|
||||
|
||||
USE tms;
|
||||
```
|
||||
|
||||
然后把 [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql) 中的语句按分号逐条执行。
|
||||
|
||||
## 不推荐但可选
|
||||
|
||||
你也可以按报错提示开启:
|
||||
|
||||
```sql
|
||||
SET GLOBAL tidb_multi_statement_mode='ON';
|
||||
```
|
||||
|
||||
但这会影响实例级行为,有安全风险,不建议为了初始化脚本临时这么做,除非你明确知道数据库侧的风险边界并且由 DBA 允许。
|
||||
|
||||
## 当前默认账号种子
|
||||
|
||||
脚本已经包含 4 个固定角色账号:
|
||||
|
||||
- `SUPER_ADMIN`
|
||||
- `KEY_ADMIN`
|
||||
- `AUDIT_ADMIN`
|
||||
- `OPS_ADMIN`
|
||||
|
||||
默认口令均为 `12345678`,其中:
|
||||
|
||||
- `KEY_ADMIN` 默认 `ACTIVE`
|
||||
- 其他角色默认 `UNENABLED`
|
||||
- 所有角色 `need_change_password = 1`
|
||||
Reference in New Issue
Block a user