|  | @@ -1,107 +0,0 @@
 | 
											
												
													
														|  | --- Passkey模块数据库表结构
 |  | 
 | 
											
												
													
														|  | --- 用于存储用户Passkey凭据和认证挑战信息
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 用户Passkey凭据表
 |  | 
 | 
											
												
													
														|  | -CREATE TABLE mxk_user_passkeys (
 |  | 
 | 
											
												
													
														|  | -    ID VARCHAR(40) NOT NULL,
 |  | 
 | 
											
												
													
														|  | -    USER_ID VARCHAR(40) NOT NULL COMMENT '用户ID',
 |  | 
 | 
											
												
													
														|  | -    CREDENTIAL_ID VARCHAR(1024) NOT NULL COMMENT 'WebAuthn凭据ID',
 |  | 
 | 
											
												
													
														|  | -    PUBLIC_KEY TEXT NOT NULL COMMENT '公钥信息',
 |  | 
 | 
											
												
													
														|  | -    SIGNATURE_COUNT BIGINT DEFAULT 0 COMMENT '签名计数器', 
 |  | 
 | 
											
												
													
														|  | -    AAGUID VARCHAR(100) COMMENT '认证器AAGUID',
 |  | 
 | 
											
												
													
														|  | -    DISPLAY_NAME VARCHAR(200) COMMENT '显示名称',
 |  | 
 | 
											
												
													
														|  | -    DEVICE_TYPE VARCHAR(50) DEFAULT 'platform' COMMENT '设备类型:platform/cross-platform',
 |  | 
 | 
											
												
													
														|  | -    CREATED_DATE DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 |  | 
 | 
											
												
													
														|  | -    LAST_USED_DATE DATETIME COMMENT '最后使用时间',
 |  | 
 | 
											
												
													
														|  | -    STATUS INT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
 |  | 
 | 
											
												
													
														|  | -    INST_ID VARCHAR(40) DEFAULT '1' COMMENT '机构ID',
 |  | 
 | 
											
												
													
														|  | -    PRIMARY KEY (ID),
 |  | 
 | 
											
												
													
														|  | -    UNIQUE KEY UK_USER_CREDENTIAL (USER_ID, CREDENTIAL_ID),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_USER_ID (USER_ID),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_CREDENTIAL_ID (CREDENTIAL_ID(255)),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_STATUS (STATUS),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_INST_ID (INST_ID)
 |  | 
 | 
											
												
													
														|  | -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户Passkey凭据表';
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 添加索引优化查询性能
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_USER_STATUS ON mxk_user_passkeys(USER_ID, STATUS);
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_CREATED_DATE ON mxk_user_passkeys(CREATED_DATE);
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_LAST_USED ON mxk_user_passkeys(LAST_USED_DATE);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- Passkey认证挑战表
 |  | 
 | 
											
												
													
														|  | -CREATE TABLE mxk_passkey_challenges (
 |  | 
 | 
											
												
													
														|  | -    ID VARCHAR(40) NOT NULL,
 |  | 
 | 
											
												
													
														|  | -    USER_ID VARCHAR(40) COMMENT '用户ID(可为空,支持无用户名登录)',
 |  | 
 | 
											
												
													
														|  | -    CHALLENGE VARCHAR(1024) NOT NULL COMMENT '挑战字符串',
 |  | 
 | 
											
												
													
														|  | -    CHALLENGE_TYPE VARCHAR(20) NOT NULL COMMENT '挑战类型:REGISTRATION/AUTHENTICATION',
 |  | 
 | 
											
												
													
														|  | -    SESSION_ID VARCHAR(100) COMMENT '会话ID',
 |  | 
 | 
											
												
													
														|  | -    CREATED_DATE DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 |  | 
 | 
											
												
													
														|  | -    EXPIRE_DATE DATETIME NOT NULL COMMENT '过期时间',
 |  | 
 | 
											
												
													
														|  | -    STATUS INT DEFAULT 0 COMMENT '状态:0-未使用,1-已使用',
 |  | 
 | 
											
												
													
														|  | -    INST_ID VARCHAR(40) DEFAULT '1' COMMENT '机构ID',
 |  | 
 | 
											
												
													
														|  | -    PRIMARY KEY (ID),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_USER_ID (USER_ID),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_CHALLENGE_TYPE (CHALLENGE_TYPE),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_SESSION_ID (SESSION_ID),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_EXPIRE_DATE (EXPIRE_DATE),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_STATUS (STATUS),
 |  | 
 | 
											
												
													
														|  | -    KEY IDX_INST_ID (INST_ID)
 |  | 
 | 
											
												
													
														|  | -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Passkey认证挑战表';
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 添加复合索引优化查询
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_CHALLENGE_STATUS ON mxk_passkey_challenges(CHALLENGE_TYPE, STATUS);
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_USER_TYPE ON mxk_passkey_challenges(USER_ID, CHALLENGE_TYPE);
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_EXPIRE_STATUS ON mxk_passkey_challenges(EXPIRE_DATE, STATUS);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 为现有用户表添加Passkey相关字段(可选方案)
 |  | 
 | 
											
												
													
														|  | --- 如果选择在现有mxk_userinfo表中添加字段,可以使用以下SQL:
 |  | 
 | 
											
												
													
														|  | -/*
 |  | 
 | 
											
												
													
														|  | -ALTER TABLE mxk_userinfo ADD COLUMN PASSKEY_ENABLED INT DEFAULT 0 COMMENT 'Passkey功能是否启用:0-禁用,1-启用';
 |  | 
 | 
											
												
													
														|  | -ALTER TABLE mxk_userinfo ADD COLUMN PASSKEY_COUNT INT DEFAULT 0 COMMENT '用户Passkey数量';
 |  | 
 | 
											
												
													
														|  | -ALTER TABLE mxk_userinfo ADD COLUMN LAST_PASSKEY_LOGIN DATETIME COMMENT '最后一次Passkey登录时间';
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 添加索引
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_PASSKEY_ENABLED ON mxk_userinfo(PASSKEY_ENABLED);
 |  | 
 | 
											
												
													
														|  | -CREATE INDEX IDX_LAST_PASSKEY_LOGIN ON mxk_userinfo(LAST_PASSKEY_LOGIN);
 |  | 
 | 
											
												
													
														|  | -*/
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 创建清理过期挑战的存储过程
 |  | 
 | 
											
												
													
														|  | -DELIMITER //
 |  | 
 | 
											
												
													
														|  | -CREATE PROCEDURE CleanExpiredPasskeyChallenges()
 |  | 
 | 
											
												
													
														|  | -BEGIN
 |  | 
 | 
											
												
													
														|  | -    DECLARE affected_rows INT DEFAULT 0;
 |  | 
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    -- 删除过期的挑战记录
 |  | 
 | 
											
												
													
														|  | -    DELETE FROM mxk_passkey_challenges 
 |  | 
 | 
											
												
													
														|  | -    WHERE EXPIRE_DATE < NOW();
 |  | 
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    -- 获取影响的行数
 |  | 
 | 
											
												
													
														|  | -    SET affected_rows = ROW_COUNT();
 |  | 
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    -- 记录清理结果
 |  | 
 | 
											
												
													
														|  | -    SELECT CONCAT('Cleaned ', affected_rows, ' expired passkey challenges') AS result;
 |  | 
 | 
											
												
													
														|  | -END //
 |  | 
 | 
											
												
													
														|  | -DELIMITER ;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 创建定时清理事件(可选)
 |  | 
 | 
											
												
													
														|  | -/*
 |  | 
 | 
											
												
													
														|  | -CREATE EVENT IF NOT EXISTS CleanPasskeyChallengesEvent
 |  | 
 | 
											
												
													
														|  | -ON SCHEDULE EVERY 1 HOUR
 |  | 
 | 
											
												
													
														|  | -DO
 |  | 
 | 
											
												
													
														|  | -  CALL CleanExpiredPasskeyChallenges();
 |  | 
 | 
											
												
													
														|  | -*/
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | --- 插入一些示例数据(仅用于测试)
 |  | 
 | 
											
												
													
														|  | -/*
 |  | 
 | 
											
												
													
														|  | -INSERT INTO mxk_user_passkeys (
 |  | 
 | 
											
												
													
														|  | -    ID, USER_ID, CREDENTIAL_ID, PUBLIC_KEY, DISPLAY_NAME, DEVICE_TYPE, INST_ID
 |  | 
 | 
											
												
													
														|  | -) VALUES (
 |  | 
 | 
											
												
													
														|  | -    'test-passkey-001', 
 |  | 
 | 
											
												
													
														|  | -    'admin', 
 |  | 
 | 
											
												
													
														|  | -    'test-credential-id-001', 
 |  | 
 | 
											
												
													
														|  | -    'test-public-key-data', 
 |  | 
 | 
											
												
													
														|  | -    'Test Passkey Device', 
 |  | 
 | 
											
												
													
														|  | -    'platform', 
 |  | 
 | 
											
												
													
														|  | -    '1'
 |  | 
 | 
											
												
													
														|  | -);
 |  | 
 | 
											
												
													
														|  | -*/
 |  | 
 |