-- sys_user 增加 MFA 相关字段 -- 用途:支持账号级多因子登录授权、绑定和校验 -- 适用数据库:MySQL SET @current_db := DATABASE(); SET @mfa_allow_exists := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @current_db AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = 'mfa_allow' ); SET @add_mfa_allow_sql := IF( @mfa_allow_exists = 0, 'ALTER TABLE sys_user ADD COLUMN mfa_allow INT NOT NULL DEFAULT 0 COMMENT ''是否允许使用MFA'' AFTER password', 'SELECT ''column mfa_allow already exists'' ' ); PREPARE stmt_mfa_allow FROM @add_mfa_allow_sql; EXECUTE stmt_mfa_allow; DEALLOCATE PREPARE stmt_mfa_allow; SET @mfa_enabled_exists := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @current_db AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = 'mfa_enabled' ); SET @add_mfa_enabled_sql := IF( @mfa_enabled_exists = 0, 'ALTER TABLE sys_user ADD COLUMN mfa_enabled INT NOT NULL DEFAULT 0 COMMENT ''是否已启用MFA'' AFTER mfa_allow', 'SELECT ''column mfa_enabled already exists'' ' ); PREPARE stmt_mfa_enabled FROM @add_mfa_enabled_sql; EXECUTE stmt_mfa_enabled; DEALLOCATE PREPARE stmt_mfa_enabled; SET @mfa_secret_exists := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @current_db AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = 'mfa_secret' ); SET @add_mfa_secret_sql := IF( @mfa_secret_exists = 0, 'ALTER TABLE sys_user ADD COLUMN mfa_secret VARCHAR(128) NULL COMMENT ''MFA密钥'' AFTER mfa_enabled', 'SELECT ''column mfa_secret already exists'' ' ); PREPARE stmt_mfa_secret FROM @add_mfa_secret_sql; EXECUTE stmt_mfa_secret; DEALLOCATE PREPARE stmt_mfa_secret; SET @mfa_bound_time_exists := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @current_db AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = 'mfa_bound_time' ); SET @add_mfa_bound_time_sql := IF( @mfa_bound_time_exists = 0, 'ALTER TABLE sys_user ADD COLUMN mfa_bound_time DATETIME NULL COMMENT ''MFA绑定时间'' AFTER mfa_secret', 'SELECT ''column mfa_bound_time already exists'' ' ); PREPARE stmt_mfa_bound_time FROM @add_mfa_bound_time_sql; EXECUTE stmt_mfa_bound_time; DEALLOCATE PREPARE stmt_mfa_bound_time; SHOW COLUMNS FROM sys_user LIKE 'mfa_allow'; SHOW COLUMNS FROM sys_user LIKE 'mfa_enabled'; SHOW COLUMNS FROM sys_user LIKE 'mfa_secret'; SHOW COLUMNS FROM sys_user LIKE 'mfa_bound_time';