Skip to content
搜索以了解InterSystems产品和解决方案,职业机会等。

2025年11月19日警报:在SQL查询中重复使用字段表达式时存在静默错误结果的风险


更新日期:2025年11月24日,以反映临时请求所需修复措施的完整列表。

警报 ID
受影响的产品和版本 风险类别和评分 明确要求
DP-445015

InterSystems IRIS® 数据平台

InterSystems IRIS® for Health

HealthShare® Health Connect

版本

2020.4.0、2021.1.0 - 2021.1.4、2021.2.0、2022.1.0 - 2022.1.7、2022.2.0、2022.3.0、2023.1.0 - 2023.1.7、2023.2.0、2023.3.0、2024.1.0 - 2024.1.5、2024.2.0、2024.3.0、2025.1.0 - 2025.1.2 和 2025.2.0

错误结果:低风险 使用在 WHERE 子句中包含表达式的 SQL 查询,该表达式包括 BETWEEN 子句中的算术运算符或至少出现两次的特定一元函数。

问题

在上述版本中,当 SQL 查询满足以下任一条件时,可能会返回错误的结果:

  • 该查询使用 BETWEEN 操作符,涉及 WHERE 子句中一个字段的算术表达式
  • 查询不止一次使用了与应用于字段的一元函数完全相同的算术表达式(在 WHERE 子句中至少出现一次)。 受影响的一元函数有
    • 一元否定或 %MINUS()
    • 单数 +、TO_NUMBER() 或 %PLUS()
    • 整理函数,如 %SQLUPPER()、%SQLSTRING()、%UPPER() 和 %ALPHAUP
    • 集合属性上的 %KEY 和 %VALUE 谓词
    • TRUNCATE()

请注意,BETWEEN子句算作两个条件;这意味着在BETWEEN子句中使用此类表达式的查询会受到此问题的影响。

例如,以下语句受到影响,因为它满足第一个条件:

SELECT * FROM t1 WHERE 4*(c1+2) BETWEEN 0 AND 1
SELECT * FROM t1 WHERE (1-TO_NUMBER(c1))/2 BETWEEN 0 AND 1

以下语句受到影响,因为它们满足第二个条件:包含一元函数表达式且该表达式出现多次:

SELECT -c1 FROM t1 WHERE -c1 > 0
SELECT * FROM t1 WHERE -c1 > 0 HAVING0 < -c1
SELECT * FROM t1 WHERE -c1 > 0 ORDER BY –c1             
SELECT * FROM t1 WHERE -c1-1 > 0 AND -c1-1 < 5
SELECT * FROM t1 WHERE %MINUS(c1) > 0 AND 0 < %MINUS(c1)+2
SELECT TRUNCATE(c2,2) FROM t1 WHERE TRUNCATE(c2,2)-20>0
SELECT favoriteColors FROM sample.person WHERE FOR SOME %ELEMENT(favoriteColors) ( %KEY = 2 OR %KEY + 1 = 7 ) ORDER BY 1

以下语句未受影响,因为没有使用带有算术表达式的BETWEEN操作符(第一个条件),且没有一元函数表达式出现多次(第二个条件):

SELECT c1 FROM t1 WHERE -c1 > 0
SELECT * FROM t1 WHERE 2*c1 > 0 AND 0 < TO_NUMBER(c1)
SELECT 2*c1 FROM t1 WHERE 2*c1 > 1
SELECT * FROM t1 WHERE c1/2 > 1 or c1/2 < 5
SELECT * FROM t1 WHERE 2*c1+3 > 0 AND 0 < -c1

影响

此问题可能导致InterSystems SQL在处理过程中静默地用不同值替换重复的字段表达式,从而返回错误结果。 这可能会引发各种问题:

  • 结果集中可能错误地包含或排除了某些行。
  • 结果集排序可能有误。
  • 基于该字段引用的列可能会有不正确的值。

解决方案

该问题已在 2024.1.6、2025.1.3、2025.3.0 和更新版本中得到纠正。

  • 2025.3.0 计划于 2025 年 11 月 19 日推出。
  • 2025.1.3 计划于 2026 年 1 月 28 日推出。
  • 2024.1.6 计划于 2026 年 4 月 15 日推出。

在此期间,如需在这些版本发布前获得修正,客户可通过全球响应中心请求临时补丁(DP-445844、DP-445089、DP-446197、DP-445136)

更多信息

如有疑问或需要帮助,请联系InterSystems 全球响应中心 (WRC)

最新警报和通知

10月 14, 2025
在 InterSystems IRIS、InterSystems IRIS for Health 和 HealthShare Health Connect(版本 2025.1.1 和 2025.2.0)中,新的 "镜像数据库下载"功能不包括某些global。
6月 27, 2025
公告编号 受影响的产品和版本 风险类别和评分 明确要求 DP-439649 产品
5月 02, 2025
InterSystems 已经解决了影响在 InterSystems IRIS、InterSystems IRIS for Health、HealthShare、HealthShare HealthConnect、TrakCare、Caché 和 Ensemble 上使用 OAuth2 Client 配置的应用程序的安全漏洞。 补救步骤和其他指导文档可从 InterSystems 全球响应中心 (WRC) 获取。
4月 08, 2025
受影响的产品和版本 明确要求 DP-439207 InterSystems IRIS® data platform 2024.3 (AIX) 在AIX(操作系统)安装过程中使用JSON处理以及支持Unicode非拉丁语系-1字符集 DP-439280 InterSystems IRIS 2024.3(使用 IntegratedML 的容器) 使用 TensorFlow 的 IntegratedML 容器
2月 22, 2025
InterSystems 已纠正了两个可能导致少数 SQL 查询返回不正确结果的问题。 此外,InterSystems 还纠正了日期/时间数据类型处理中的不一致性,对于依赖于先前不一致性行为的现有应用程序来说,这种不一致性可能会导致不同的、意想不到的但正确的结果。
2月 19, 2025
InterSystems 已修复一个缺陷,该缺陷导致在使用特定 $LIST 语法时引入无效的数据库和日志记录。 遇到这种缺陷的可能性很低,但对运营的影响可能很大。
10月 09, 2024
InterSystems 已经解决了影响 InterSystems IRIS、InterSystems IRIS for Health、HealthShare、HealthShare HealthConnect、TrakCare、Caché 和 Ensemble 的 Web 网关和 CSP 网关的安全漏洞。可从 InterSystems 全球响应中心 (WRC) 获取补救步骤和其他指导文件。在讨论本通知时,请参考 "SVR2024A"。 如需修复帮助,请联系您的应用程序提供商或 InterSystems 全球响应中心。
8月 21, 2024
InterSystems 已修复了一个缺陷,在极少数情况下,该缺陷可能导致多卷数据库出现数据库损坏或 错误。只有被截断的数据库才存在风险。
6月 03, 2024
从发布InterSystems IRIS®数据平台2022.3开始,InterSystems修改了许可证强制执行机制,以包括REST和SOAP请求。由于这种变化,在升级后,使用REST或SOAP的非处理器核数的许可证环境下,用户可能会遇到更高的许可证消耗。要确定此警报是否适用于您的InterSystems许可证,请按照下面链接的FAQ中的说明进行操作。