WSO2 AM 4.1.0配置原2.1.0 JDBC次级用户存储报列不存在问题求助
解决WSO2 APIM 4.1.0适配旧版2.1.0 JDBC用户存储的UM_USER_ID异常问题
问题原因
WSO2 API Manager从2.1.0升级到4.1.0时,用户存储的数据库表结构发生了变更——新版本的用户存储依赖UM_USER_ID作为用户的唯一标识字段,但旧版2.1.0的UM_USER表中不存在该字段,导致查询用户列表时触发SQL语法错误。
解决方案
方案1:为旧表添加并填充UM_USER_ID字段
这是最贴合新版本架构的方案,步骤如下:
- 登录MySQL数据库,定位到旧版用户存储对应的数据库
- 执行ALTER语句添加字段:
ALTER TABLE UM_USER ADD COLUMN UM_USER_ID VARCHAR(255) NOT NULL UNIQUE AFTER UM_USER_NAME;
- 为现有用户生成唯一的UM_USER_ID值(推荐用UUID):
UPDATE UM_USER SET UM_USER_ID = UUID();
- 同步关联表数据(如果新版本依赖UM_USER_ID关联角色):
若UM_USER_ROLE表需要关联用户ID,执行以下语句:
-- 添加UM_USER_ID列 ALTER TABLE UM_USER_ROLE ADD COLUMN UM_USER_ID VARCHAR(255); -- 关联更新用户ID UPDATE UM_USER_ROLE ur JOIN UM_USER u ON ur.UM_USER_NAME = u.UM_USER_NAME SET ur.UM_USER_ID = u.UM_USER_ID;
注意:操作前务必备份数据库,避免数据丢失。
方案2:修改JDBC用户存储配置适配旧表结构
如果不想修改数据库结构,可以通过配置让新版本的用户存储管理器使用旧表的用户标识字段:
在WSO2 APIM的deployment.toml中配置次级用户存储时,添加user_id_column属性,指定旧表的用户标识列(通常是UM_USER_NAME):
[[user_store]] type = "database" domain_name = "OLD_USER_STORE" connection_url = "jdbc:mysql://localhost:3306/old_user_db?useSSL=false" connection_username = "db_user" connection_password = "db_pass" user_id_column = "UM_USER_NAME"
注意:此方案仅适用于基础用户认证、列表查询场景,部分新版本依赖
UM_USER_ID的高级功能可能无法正常使用。
内容的提问来源于stack exchange,提问作者Lilan Mihiranga
相关产品推荐
相关产品推荐

