2

我们正在使用iReport 5JasperReports Server 5。W 有一个基于MySQL 存储过程的报告,该过程在 Designer 中运行良好,但从服务器运行时抛出 6632 错误。

存储过程接受 3 个参数,我已将参数设置为服务器上的输入控件。当我们从服务器运行报告时,我们收到以下错误:

2013-04-16 22:20:00,968 ERROR Validator,pool-1-thread-9:493 - Invalid SQL:An error has occurred. 
Please contact your system administrator. (6632), SQL: call sp_fasb(?, ?, ?)
2013-04-16 22:20:00,968 ERROR AsyncJasperPrintAccessor,pool-1-thread-9:258 - Error during report execution
com.jaspersoft.jasperserver.api.JSSecurityException: An error has occurred. Please contact your system administrator. (6632)
at com.jaspersoft.jasperserver.api.security.validators.Validator.validateSQL(Validator.java:494)
at com.jaspersoft.jasperserver.api.engine.jasperreports.util.JRTimezoneJdbcQueryExecuter.createDatasource(JRTimezoneJdbcQueryExecuter.java:167)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1086)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:667)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$SynchronousExecutor.execute(EngineServiceImpl.java:859)
at net.sf.jasperreports.engine.fill.BaseFillHandle.startFill(BaseFillHandle.java:165)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$AsynchronousReportFiller.fillReport(EngineServiceImpl.java:821)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.fillReport(EngineServiceImpl.java:1622)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runReport(EngineServiceImpl.java:1005)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportRunnable.run(EngineServiceImpl.java:881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

在以前的版本中,这被报告为需要 SQL Validation 属性的正则表达式,或者需要延长基础查询中字符数的大小,我们尝试了这两种方法都没有成功。

4

2 回答 2

1

此错误与 4.5 中的 SQL 注入安全相关修复有关

  1. 请检查您正在运行的报告不包含在查询开始时有注释的 SQL 查询。从 4.5 开始,将不允许此类查询,因为它们会带来 SQL 注入安全风险。

  2. 您能否从“jasperserver.log”中添加确切的错误日志以获取确切的错误消息。然后我们将能够通过配置安全相关的属性文件为您提供正确的解决方法

  3. 作为简单的解决方法,您还可以转到 /jasperserver-pro/WEB-INF/classes/esapi/security-config.properties 文件,然后禁用 SQL 注入的安全性:-

      security.validation.sql.on=true 
    

      security.validation.sql.on=false
    
于 2013-04-16T09:26:40.637 回答
1

使用 Jaspersoft Studio 6.1.1 并尝试获取与 Jasper Server 5.5.0 兼容的报告,我发现我所要做的就是添加 language="SQL" 作为 queryString 的属性,然后 6632 错误就停止了。我不确定为什么会丢失,但就我而言。

<queryString language="SQL">
    <![CDATA[call sp_fasb(?, ?, ?)]]>
</queryString>
于 2016-04-15T01:20:29.377 回答