Conversation
升级Nacos数据源插件至v3.0.1并优化多数据库适配变更概述新功能
重构
数据库变更
依赖更新
安全增强
配置调整
变更文件
时序图sequenceDiagram
participant BCM as BaseConfigMigrateMapper
participant DMD as DaMengDatabaseDialect
participant KBD as KingbaseDatabaseDialect
participant OG as OpenGaussDatabaseDialect
BCM->>DMD: getFunction("NOW()")
BCM->>KBD: getPrimaryKeyGeneratedKeys()
BCM->>OG: getLimitPageSqlWithOffset()
DMD-->>BCM: 返回Dameng专用函数SYSDATE()
KBD-->>BCM: 返回自增主键策略
OG-->>BCM: 返回分页查询优化后的SQL语句
💡 小贴士与 lingma-agents 交流的方式📜 直接回复评论
📜 在代码行处标记
📜 在讨论中提问
|
There was a problem hiding this comment.
🔎 代码评审报告
🎯 评审意见概览
| 严重度 | 数量 | 说明 |
|---|---|---|
| 🔴 Blocker | 2 | 阻断性问题,需立即修复。例如:系统崩溃、关键功能不可用或严重安全漏洞。 |
| 🟠 Critical | 6 | 严重问题,高优先级修复。例如:核心功能异常或性能瓶颈影响用户体验。 |
| 🟡 Major | 5 | 主要问题,建议修复。例如:非核心功能缺陷或代码维护性较差。 |
| 🟢 Minor | 5 | 次要问题,酬情优化。例如:代码格式不规范或注释缺失。 |
总计: 18 个问题
⚠️ 需要立即关注的阻断性问题
nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/DaMengDatabaseDialect.java
- 修复枚举类引用的包路径错误 (L21)
nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoGrayMapper.java
- 类重命名导致继承关系断裂 (L19-L29)
📋 评审意见详情
💡 代码实现建议
以下是文件级别的代码建议,聚焦于代码的可读性、可维护性和潜在问题。
☕ nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoMapper.java (1 💬)
- 修复SQL拼接中的语法错误和参数化问题 (L119-L121)
☕ nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigTagsRelationMapper.java (1 💬)
- 修复IN子句参数处理的潜在SQL注入风险 (L145-L147)
☕ nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/DaMengDatabaseDialect.java (1 💬)
- 修复枚举类引用的包路径错误 (L21)
🛢️ nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/resources/schema/nacos-dm.sql (2 💬)
- TENANT_ID字段默认值设置不统一 (L31)
- HIS_CONFIG_INFO表缺少外键约束 (L171-L172)
☕ nacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/enums/TrustedKingbaseFunctionEnum.java (1 💬)
- 函数名称查找未处理大小写差异,可能导致未找到函数的情况。 (L34-L39)
☕ nacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoBetaMapperByKingbase.java (1 💬)
🛢️ nacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/resources/schema/nacos-mssql.sql (1 💬)
- SQL表字段约束缺失导致数据合法性风险 (L117-L207)
☕ nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoGrayMapper.java (1 💬)
- 类重命名导致继承关系断裂 (L19-L29)
☕ nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoMapper.java (1 💬)
- 修复拼写错误的数据库类型常量名称 (L33)
☕ nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigTagsRelationMapper.java (1 💬)
- 修正类注释中的数据库类型描述错误 (L22-L40)
☕ nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussTenantInfoMapper.java (1 💬)
- 修复数据库类型常量拼写错误 (L31)
☕ nacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/TenantCapacityMapperByOracle.java (1 💬)
- 硬编码默认租户ID存在维护风险 (L36-L39)
🛢️ nacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/resources/schema/nacos-oracle.sql (3 💬)
- 修正注释中的拼写错误,将'秘钥'改为'密钥' (L67)
- 补充权限表字段注释 (L448-L450)
- 修正tenant_info表的时间字段类型 (L552-L553)
🛢️ nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema/nacos-pg.sql (2 💬)
- 注释中的拼写错误需要修正 (L104)
- tenant_info表的gmt_create/gmt_modified字段数据类型错误 (L245-L246)
🚀 架构设计建议
以下是对代码架构和设计的综合分析,聚焦于跨文件交互、系统一致性和潜在优化空间。
🔍1. 跨数据库schema字段类型与约束不一致
不同数据库的tenant_info表中gmt_create/gmt_modified字段类型不一致(Oracle为BIGINT,其他为TIMESTAMP),且部分表缺少外键约束。例如:达梦数据库的HIS_CONFIG_INFO表未设置外键关联主表CONFIG_INFO的ID字段,可能导致数据完整性风险。需统一各数据库字段类型定义并补充外键约束。
📌 关键代码
CREATE TABLE HIS_CONFIG_INFO ... ID BIGINT NOT NULL
gmt_create BIGINT NOT NULL, gmt_modified BIGINT NOT NULL
数据类型不一致可能导致跨数据库迁移失败,缺少外键约束可能引发孤儿数据问题
🔍2. 租户ID默认值设置不统一
各数据库schema中tenant_id字段的默认值设置不统一。例如达梦数据库设置为'',而Kingbase和PostgreSQL中使用 DEFAULT '',但Oracle使用 DEFAULT 'PUBLIC'。需统一默认值为空字符串并修正注释中的不一致描述。
📌 关键代码
TENANT_ID VARCHAR(128) DEFAULT ''
tenant_id varchar2(128) DEFAULT 'PUBLIC'
多租户功能因默认值差异导致配置隔离失效
🔍3. 函数名大小写处理未统一
Kingbase数据库的TrustedKingbaseFunctionEnum枚举类未处理函数名大小写差异,可能导致因数据库版本差异引发的函数查找失败。需补充函数名大小写标准化处理逻辑
📌 关键代码
未实现函数名大小写转换逻辑不同Kingbase版本可能因函数大小写写法不同导致SQL注入漏洞或功能异常
🔍4. 基础Mapper类继承关系断裂
OpenGauss的OpenGaussConfigInfoMapper类未正确继承新的BaseConfigInfoMapper基类,导致部分通用功能缺失。需检查所有数据库实现是否继承最新基类
📌 关键代码
public class OpenGaussConfigInfoMapper extends AbstractMapperByGaussdb遗漏基类通用方法导致分页查询等核心功能失效
🔍5. 重复实现主键生成方法
多个Kingbase Mapper类重复实现getPrimaryKeyGeneratedKeys方法(违反DRY原则),应在基类统一实现该逻辑
📌 关键代码
public String[] getPrimaryKeyGeneratedKeys() { ... }代码冗余增加维护成本,可能导致不同实现产生不一致行为
🔍6. 枚举类函数映射未全覆盖
达梦数据库的TrustedDamengFunctionEnum仅包含NOW()映射,而其他数据库如Oracle/PostgreSQL的枚举类包含更多函数映射,需确保所有支持函数都有可信枚举覆盖
📌 关键代码
NOW("NOW()", "SYSDATE()")未覆盖函数可能导致SQL注入风险或数据库兼容性问题
🔍7. 历史配置表缺少外键约束
所有数据库的his_config_info表均未设置与config_info表的外键关联,可能导致数据不一致。需补充外键约束确保数据完整性
📌 关键代码
CREATE TABLE HIS_CONFIG_INFO ... ID BIGINT NOT NULL
主表删除数据时历史表残留孤儿记录
🔍8. 配置聚合表被废弃但未清理
配置聚合表config_info_aggr在多个数据库schema中仍然存在,但新代码已删除其Mapper实现。需彻底清理废弃表结构
遗留表结构可能导致schema冲突或存储冗余数据
🔍9. 加密依赖管理不一致
OpenGauss插件在pom.xml中注释掉了加密依赖,而其他数据库仍保留。需统一加密功能依赖管理策略
📌 关键代码
<!-- 注释掉的加密依赖 -->加密功能缺失可能导致敏感配置明文存储
🔍10. 时区处理不统一
各数据库的timestamp字段时区处理方式不同(达梦使用DATETIME(3),Oracle使用TIMESTAMP,PostgreSQL使用TIMESTAMP),需统一时区存储策略
📌 关键代码
gmt_create DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
跨数据库时间比较可能出现时区转换错误
审查详情
📒 文件清单 (76 个文件)
✅ 新增: 11 个文件
❌ 删除: 4 个文件
🔄 重命名: 6 个文件
📝 变更: 55 个文件
✅ 新增文件:
nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigMigrateMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseHistoryConfigInfoMapper.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigMigrateMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/enums/TrustedKingbaseFunctionEnum.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoGrayMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigMigrateMapperByKingbase.javanacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/mssql/ConfigMigrateMapperBySqlServer.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigMigrateMapper.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigInfoGrayMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigMigrateMapperByOracle.javanacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/postgresql/ConfigMigrateMapperByPostgresql.java
❌ 删除文件:
nacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/mssql/ConfigInfoAggrMapperBySqlServer.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoAggrMapper.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/AbstractOracleMapper.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigInfoAggrMapperByOracle.java
🔄 重命名文件:
nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoAggrMapper.java→nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoGrayMapper.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/emums/TrustedDaMengFunctionEnum.java→nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/enums/TrustedDamengFunctionEnum.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigInfoAggrMapperByDaMeng.java→nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigInfoGrayMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoAggrMapperByKingbase.java→nacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/mssql/ConfigInfoGrayMapperBySqlServer.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/AbstractMapperByGaussdb.java→nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoGrayMapper.javanacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/postgresql/ConfigInfoAggrMapperByPostgresql.java→nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/postgresql/ConfigInfoGrayMapperByPostgresql.java
📝 变更文件:
nacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoBetaMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigInfoTagMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseConfigTagsRelationMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseGroupCapacityMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseTenantCapacityMapper.javanacos-datasource-plugin-ext/nacos-datasource-plugin-ext-base/src/main/java/com/alibaba/nacos/plugin/datasource/impl/base/BaseTenantInfoMapper.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/DaMengDatabaseDialect.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigInfoBetaMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigInfoMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigInfoTagMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/ConfigTagsRelationMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/GroupCapacityMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/HistoryConfigInfoMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/TenantCapacityMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dm/TenantInfoMapperByDaMeng.javanacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/src/main/resources/schema/nacos-dm.sqlnacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/KingbaseDatabaseDialect.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoBetaMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigInfoTagMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/ConfigTagsRelationMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/GroupCapacityMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/HistoryConfigInfoMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/TenantCapacityMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/kingbase/TenantInfoMapperByKingbase.javanacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/resources/schema/nacos-kingbase.sqlnacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/src/main/resources/schema/nacos-mssql.sqlnacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/pom.xmlnacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/GaussdbDatabaseDialect.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoBetaMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigInfoTagMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussConfigTagsRelationMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussGroupCapacityMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussHistoryConfigInfoMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussTenantCapacityMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/opengauss/OpenGaussTenantInfoMapper.javanacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigInfoBetaMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigInfoMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigInfoTagMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/ConfigTagsRelationMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/GroupCapacityMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/HistoryConfigInfoMapperOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/TenantCapacityMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/TenantInfoMapperByOracle.javanacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/src/main/resources/schema/nacos-oracle.sqlnacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mappernacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema/nacos-pg.sqlpom.xml
💡 小贴士
与 lingma-agents 交流的方式
📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:
-
在当前代码中添加详细的注释说明。
-
请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。
📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:
-
@lingma-agents 分析这个方法的性能瓶颈并提供优化建议。
-
@lingma-agents 对这个方法生成优化代码。
📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:
-
@lingma-agents 请总结上述讨论并提出解决方案。
-
@lingma-agents 请根据讨论内容生成优化代码。
| "SELECT id,data_id,group_id,tenant_id,app_name," + (needContent ? "content," : "") | ||
| + "md5,gmt_modified,type,encrypted_data_key FROM config_info WHERE id > ? ORDER BY id ASC ", | ||
| startRow, pageSize); |
There was a problem hiding this comment.
修复SQL拼接中的语法错误和参数化问题
🟠 Critical | 🔓 Vulnerabilities
📋 问题详情
在findAllConfigInfoFragment方法中,SQL拼接的content字段条件处理存在语法风险。原代码直接拼接字符串而未使用参数化查询,可能导致SQL注入风险。此外,needContent ? "content," : ""导致字段逗号多余问题,可能引发语法错误。
💡 解决方案
修改SQL拼接逻辑,避免逗号多余问题并规范参数化:
- "SELECT id,data_id,group_id,tenant_id,app_name," + (needContent ? "content," : "") + "md5,gmt_modified,type,encrypted_data_key FROM config_info WHERE id > ? ORDER BY id ASC "
+ "SELECT id,data_id,group_id,tenant_id,app_name" + (needContent ? ",content" : "") + ",md5,gmt_modified,type,encrypted_data_key FROM config_info WHERE id > ? ORDER BY id ASC"您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| where.append(" AND a.type in (?)"); | ||
| paramList.add(types); | ||
| } |
There was a problem hiding this comment.
修复IN子句参数处理的潜在SQL注入风险
🟠 Critical | 🔓 Vulnerabilities
📋 问题详情
在findConfigInfoLike4PageFetchRows方法中,types参数直接拼接到IN子句中,未使用参数化处理,存在SQL注入风险。
💡 解决方案
修改为安全的参数化处理方式:
- where.append(" AND type in (?)");
- paramList.add(types);
+ where.append(" AND type IN (" + databaseDialect.getArrayPlaceHolder(types.length) + ")");
+ paramList.addAll(Arrays.asList(types));您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| import com.alibaba.nacos.plugin.datasource.constants.DatabaseTypeConstant; | ||
| import com.alibaba.nacos.plugin.datasource.constants.PrimaryKeyConstant; | ||
| import com.alibaba.nacos.plugin.datasource.emums.TrustedDaMengFunctionEnum; | ||
| import com.alibaba.nacos.plugin.datasource.enums.TrustedDamengFunctionEnum; |
There was a problem hiding this comment.
修复枚举类引用的包路径错误
🔴 Blocker | 🐞 Bugs
📋 问题详情
原代码引用了已重命名的枚举类TrustedDaMengFunctionEnum,但包路径仍指向旧的emnums包,导致编译失败。
💡 解决方案
更新包名和类名:
-import com.alibaba.nacos.plugin.datasource.emums.TrustedDaMengFunctionEnum;
+import com.alibaba.nacos.plugin.datasource.enums.TrustedDamengFunctionEnum;您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| SRC_USER CLOB, | ||
| SRC_IP VARCHAR(50) DEFAULT NULL, | ||
| APP_NAME VARCHAR(128) DEFAULT NULL, | ||
| TENANT_ID VARCHAR(128) DEFAULT '', |
There was a problem hiding this comment.
TENANT_ID字段默认值设置不统一
🟡 Major | 🧹 Code Smells
📋 问题详情
在CONFIG_INFO表TENANT_ID字段使用DEFAULT '',而GROUP_CAPACITY表中同样字段使用DEFAULT '' NULL,存在配置不一致风险
💡 解决方案
补充NOT NULL约束保持字段约束一致性:
-TENANT_ID VARCHAR(128) DEFAULT '',
+TENANT_ID VARCHAR(128) DEFAULT '' NOT NULL,需同步检查其他表的TENANT_ID字段约束设置,确保全表约束统一。
您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| CREATE TABLE HIS_CONFIG_INFO ( | ||
| ID BIGINT NOT NULL, |
There was a problem hiding this comment.
| COMMENT ON COLUMN config_info.effect IS '配置生效的描述'; | ||
| COMMENT ON COLUMN config_info.type IS '配置的类型'; | ||
| COMMENT ON COLUMN config_info.c_schema IS '配置的模式'; | ||
| COMMENT ON COLUMN config_info.encrypted_data_key IS '密钥'; |
There was a problem hiding this comment.
修正注释中的拼写错误,将'秘钥'改为'密钥'
🟢 Minor | 🧹 Code Smells
📋 问题详情
在config_info表的encrypted_data_key字段注释中,发现注释内容为'秘钥',存在汉字拼写错误。'密钥'是正确的术语,使用错误的汉字可能引起理解混淆,影响代码可维护性和文档准确性。
💡 解决方案
将注释中的错别字修正:
-COMMENT ON COLUMN config_info.encrypted_data_key IS '秘钥';
+COMMENT ON COLUMN config_info.encrypted_data_key IS '密钥';您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| COMMENT ON COLUMN permissions.role IS 'role'; | ||
| COMMENT ON COLUMN permissions.resource IS 'resource'; | ||
| COMMENT ON COLUMN permissions.action IS 'action'; |
There was a problem hiding this comment.
补充权限表字段注释
🟢 Minor | 🧹 Code Smells
📋 问题详情
在permissions表中,role、resource、action字段缺少中文注释,仅存在英文注释。建议补充中文注释以符合代码规范。
💡 解决方案
补充中文注释说明:
-COMMENT ON COLUMN permissions.role IS 'role';
+COMMENT ON COLUMN permissions.role IS '角色名称';
-COMMENT ON COLUMN permissions.resource IS 'resource';
+COMMENT ON COLUMN permissions.resource IS '资源路径';
-COMMENT ON COLUMN permissions.action IS 'action';
+COMMENT ON COLUMN permissions.action IS '操作类型';您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| kp VARCHAR2(128) NOT NULL, | ||
| tenant_id VARCHAR2(128) DEFAULT '', |
There was a problem hiding this comment.
修正tenant_info表的时间字段类型
🟡 Major | 🧹 Code Smells
📋 问题详情
在tenant_info表中,gmt_create和gmt_modified字段使用NUMBER(20)类型存储时间,但Oracle推荐使用TIMESTAMP类型存储时间信息。使用数值类型可能导致时间解析复杂度增加,且不符合数据库设计规范。
💡 解决方案
修改字段类型为TIMESTAMP:
-gmt_create NUMBER(20) NOT NULL,
-gmt_modified NUMBER(20) NOT NULL
+gmt_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+gmt_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| COMMENT ON COLUMN config_info_gray.tenant_id IS 'tenant_id'; | ||
| COMMENT ON COLUMN config_info_gray.gray_name IS 'gray_name'; | ||
| COMMENT ON COLUMN config_info_gray.gray_rule IS 'gray_rule'; | ||
| COMMENT ON COLUMN config_info_gray.encrypted_data_key IS 'encrypted_data_key'; |
There was a problem hiding this comment.
注释中的拼写错误需要修正
🟢 Minor | 🧹 Code Smells
📋 问题详情
在config_info表的encrypted_data_key列注释中,旧代码使用了'秘钥',新代码中修正为'密钥',但其他表如config_info_gray的同名字段注释仍存在拼写错误。建议统一使用'密钥'作为标准注释。
💡 解决方案
修改encrypted_data_key列的注释:
-COMMENT ON COLUMN config_info_gray.encrypted_data_key IS 'encrypted_data_key';
+COMMENT ON COLUMN config_info_gray.encrypted_data_key IS '密钥';您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
| id BIGSERIAL NOT NULL, | ||
| kp VARCHAR(128) NOT NULL, |
There was a problem hiding this comment.
tenant_info表的gmt_create/gmt_modified字段数据类型错误
🟠 Critical | 🐞 Bugs
📋 问题详情
旧代码中tenant_info表的gmt_create和gmt_modified字段使用BIGINT类型存储时间戳,而新代码改为BIGSERIAL类型,可能导致存储格式错误(BIGSERIAL是自增序列,而非时间戳)。建议恢复为TIMESTAMP类型。
💡 解决方案
修改字段类型为TIMESTAMP:
-gmt_create BIGINT NOT NULL,
-gmt_modified BIGINT NOT NULL
+gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)
|
@shilyaziw OpenGauss 已经由原作者适配完毕了, 麻烦同步一下新代码, 解决一下冲突。 |
更新datasource插件到nacos v3.0.1,除dm外,其余datasource需要测试