passkey_tables.sql 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. -- MaxKey Passkey 模块数据库表创建脚本
  2. -- 创建用户 Passkey 表和挑战表
  3. -- 用户 Passkey 表
  4. CREATE TABLE IF NOT EXISTS mxk_user_passkeys (
  5. id VARCHAR(40) NOT NULL COMMENT '主键ID',
  6. user_id VARCHAR(40) NOT NULL COMMENT '用户ID',
  7. credential_id VARCHAR(500) NOT NULL COMMENT '凭据ID(Base64编码)',
  8. public_key TEXT NOT NULL COMMENT '公钥数据(Base64编码)',
  9. display_name VARCHAR(100) COMMENT '显示名称',
  10. device_type VARCHAR(50) DEFAULT 'unknown' COMMENT '设备类型',
  11. signature_count BIGINT DEFAULT 0 COMMENT '签名计数器',
  12. created_date DATETIME NOT NULL COMMENT '创建时间',
  13. last_used_date DATETIME COMMENT '最后使用时间',
  14. aaguid VARCHAR(100) COMMENT 'AAGUID',
  15. inst_id VARCHAR(40) DEFAULT '1' COMMENT '机构ID',
  16. status INT DEFAULT 1 COMMENT '状态:1-正常,0-禁用',
  17. PRIMARY KEY (id),
  18. UNIQUE KEY uk_credential_id (credential_id),
  19. KEY idx_user_id (user_id),
  20. KEY idx_inst_id (inst_id),
  21. KEY idx_created_date (created_date)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户Passkey凭据表';
  23. -- Passkey 挑战表
  24. CREATE TABLE IF NOT EXISTS mxk_passkey_challenges (
  25. id VARCHAR(40) NOT NULL COMMENT '挑战ID',
  26. user_id VARCHAR(40) COMMENT '用户ID(认证时可为空)',
  27. challenge TEXT NOT NULL COMMENT '挑战数据(Base64编码)',
  28. challenge_type VARCHAR(20) NOT NULL COMMENT '挑战类型:REGISTRATION-注册,AUTHENTICATION-认证',
  29. created_date DATETIME NOT NULL COMMENT '创建时间',
  30. expires_date DATETIME NOT NULL COMMENT '过期时间',
  31. status INT DEFAULT 0 COMMENT '状态:0-未使用,1-已使用',
  32. inst_id VARCHAR(40) DEFAULT '1' COMMENT '机构ID',
  33. PRIMARY KEY (id),
  34. KEY idx_user_id (user_id),
  35. KEY idx_challenge_type (challenge_type),
  36. KEY idx_expires_date (expires_date),
  37. KEY idx_inst_id (inst_id),
  38. KEY idx_status (status)
  39. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Passkey挑战表';
  40. -- 创建索引以优化查询性能
  41. CREATE INDEX idx_user_passkeys_user_status ON mxk_user_passkeys(user_id, status);
  42. CREATE INDEX idx_passkey_challenges_expires_status ON mxk_passkey_challenges(expires_date, status);
  43. CREATE INDEX idx_passkey_challenges_user_type ON mxk_passkey_challenges(user_id, challenge_type);
  44. -- 插入示例数据(可选)
  45. -- INSERT INTO mxk_user_passkeys (id, user_id, credential_id, public_key, display_name, device_type, signature_count, created_date, inst_id)
  46. -- VALUES ('test_passkey_1', 'test_user_1', 'test_credential_id_1', 'test_public_key_1', 'Test Device', 'platform', 0, NOW(), '1');
  47. COMMIT;