| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- -- V14__system_management 的达梦版(DM8):MySQL 原版 ../migration/V14__system_management.sql
- -- 的等价迁移。
- -- 用途:达梦不在 Flyway 支持列表、内置迁移默认关闭(见 application.yml),本脚本
- -- 供 DISQL / DM 管理工具手工执行或外部迁移工具引用;目录与 db/migration 平级,
- -- 不参与 Flyway 扫描(放 db/migration 子目录会与 MySQL 版冲突为重复 V14)。
- -- 语义与 MySQL 版完全一致:
- -- 1. sys_role 加 manage_system / manage_audit_log BIT/TINYINT NOT NULL DEFAULT 0;
- -- 2. 新建 sys_metric_sample 资源采样表(BIGINT IDENTITY 主键 + sampled_at 索引);
- -- 3. 重建 sys_audit_log 两组 CHECK 白名单(动作 42 项 / 目标 12 项,含 SYSTEM)。
- -- 幂等:列/表/约束均先探测后执行,重复运行无副作用;与 Python 版 Alembic 0029
- -- 双引擎互冲安全(谁先跑,后者全部跳过或重建同集合)。
- -- 语法说明:达梦无 MySQL 的 SET @var / IF() / PREPARE 动态 SQL,改用 DMSQL 匿名块 +
- -- EXECUTE IMMEDIATE;系统字典用 Oracle 兼容视图 USER_TAB_COLUMNS / USER_TABLES /
- -- USER_CONSTRAINTS(未加引号建表时名称大写存储)。
- -- 1. sys_role 管理位加列(已存在则跳过)
- DECLARE
- v_count INT;
- BEGIN
- SELECT COUNT(*) INTO v_count
- FROM USER_TAB_COLUMNS
- WHERE TABLE_NAME = 'SYS_ROLE'
- AND COLUMN_NAME = 'MANAGE_SYSTEM';
- IF v_count = 0 THEN
- EXECUTE IMMEDIATE
- 'ALTER TABLE SYS_ROLE ADD COLUMN MANAGE_SYSTEM TINYINT NOT NULL DEFAULT 0';
- END IF;
- END;
- /
- DECLARE
- v_count INT;
- BEGIN
- SELECT COUNT(*) INTO v_count
- FROM USER_TAB_COLUMNS
- WHERE TABLE_NAME = 'SYS_ROLE'
- AND COLUMN_NAME = 'MANAGE_AUDIT_LOG';
- IF v_count = 0 THEN
- EXECUTE IMMEDIATE
- 'ALTER TABLE SYS_ROLE ADD COLUMN MANAGE_AUDIT_LOG TINYINT NOT NULL DEFAULT 0';
- END IF;
- END;
- /
- -- 2. 资源采样表(已存在则整段跳过,索引随表一并创建)
- DECLARE
- v_count INT;
- BEGIN
- SELECT COUNT(*) INTO v_count
- FROM USER_TABLES
- WHERE TABLE_NAME = 'SYS_METRIC_SAMPLE';
- IF v_count = 0 THEN
- EXECUTE IMMEDIATE 'CREATE TABLE SYS_METRIC_SAMPLE (
- ID BIGINT IDENTITY(1, 1) NOT NULL,
- SAMPLED_AT TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL,
- CPU_PERCENT FLOAT DEFAULT NULL,
- MEM_USED_BYTES BIGINT NOT NULL,
- MEM_TOTAL_BYTES BIGINT NOT NULL,
- PRIMARY KEY (ID)
- )';
- EXECUTE IMMEDIATE
- 'CREATE INDEX IX_SYS_METRIC_SAMPLE_TIME ON SYS_METRIC_SAMPLE (SAMPLED_AT)';
- END IF;
- END;
- /
- -- 3. 删除旧 CHECK 约束(不存在则跳过;按达梦大写存储名探测与删除)
- DECLARE
- v_count INT;
- BEGIN
- SELECT COUNT(*) INTO v_count
- FROM USER_CONSTRAINTS
- WHERE TABLE_NAME = 'SYS_AUDIT_LOG'
- AND CONSTRAINT_NAME = 'CK_SYS_AUDIT_LOG_AUDIT_ACTION_TYPE';
- IF v_count > 0 THEN
- EXECUTE IMMEDIATE
- 'ALTER TABLE SYS_AUDIT_LOG DROP CONSTRAINT CK_SYS_AUDIT_LOG_AUDIT_ACTION_TYPE';
- END IF;
- END;
- /
- DECLARE
- v_count INT;
- BEGIN
- SELECT COUNT(*) INTO v_count
- FROM USER_CONSTRAINTS
- WHERE TABLE_NAME = 'SYS_AUDIT_LOG'
- AND CONSTRAINT_NAME = 'CK_SYS_AUDIT_LOG_AUDIT_TARGET_TYPE';
- IF v_count > 0 THEN
- EXECUTE IMMEDIATE
- 'ALTER TABLE SYS_AUDIT_LOG DROP CONSTRAINT CK_SYS_AUDIT_LOG_AUDIT_TARGET_TYPE';
- END IF;
- END;
- /
- -- 4. 重建 CHECK 白名单(不带引号,达梦自动大写,与探测名一致;42 项动作 / 12 项目标)
- ALTER TABLE SYS_AUDIT_LOG ADD CONSTRAINT CK_SYS_AUDIT_LOG_AUDIT_ACTION_TYPE
- CHECK (ACTION_TYPE IN (
- 'LOGIN', 'LOGOUT', 'VIEW_DOCUMENT', 'DOWNLOAD_DOCUMENT',
- 'UPLOAD_DOCUMENT', 'BATCH_IMPORT', 'EDIT_DOCUMENT', 'DELETE_DOCUMENT',
- 'CREATE_CATEGORY', 'EDIT_CATEGORY', 'DELETE_CATEGORY', 'CHANGE_PERMISSION',
- 'BIND_ATTACHMENT', 'UNBIND_ATTACHMENT', 'RESTORE_DOCUMENT',
- 'CREATE_ORGANIZATION', 'EDIT_ORGANIZATION', 'DELETE_ORGANIZATION',
- 'CREATE_USER', 'EDIT_USER', 'DELETE_USER', 'RESET_USER_PASSWORD',
- 'REORDER_DOCUMENT', 'REORDER_ATTACHMENT', 'REORDER_CATEGORY',
- 'CREATE_ROLE', 'EDIT_ROLE', 'DELETE_ROLE', 'CHANGE_ROLE_PERMISSION',
- 'CHANGE_ROLE_USER', 'DOCUMENT_PASSWORD_SET', 'DOCUMENT_PASSWORD_REMOVE',
- 'CREATE_IP_ENTRY', 'EDIT_IP_ENTRY', 'DELETE_IP_ENTRY', 'ASSIGN_ORG_IP',
- 'MOVE_DOCUMENT', 'MOVE_ATTACHMENT', 'BACKUP_CREATE',
- 'PREVIEW_CACHE_CLEAR', 'FORCE_OFFLINE', 'BACKUP_TEST_TARGET'));
- ALTER TABLE SYS_AUDIT_LOG ADD CONSTRAINT CK_SYS_AUDIT_LOG_AUDIT_TARGET_TYPE
- CHECK (TARGET_TYPE IS NULL OR TARGET_TYPE IN (
- 'AUTH', 'CATEGORY', 'DOCUMENT', 'ATTACHMENT', 'PERMISSION',
- 'ATTACHMENT_BINDING', 'ORGANIZATION', 'USER', 'ROLE', 'IP_ENTRY',
- 'BACKUP', 'SYSTEM'));
|