文档首页
MySQL Connector/J 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 开发人员指南  /  Connector/J 支持  /  如何报告 Connector/J 漏洞或问题

18.2 如何报告 Connector/J 漏洞或问题

报告漏洞的常规位置是 http://bugs.mysql.com/,这是我们漏洞数据库的地址。该数据库是公开的,任何人都可以浏览和搜索。如果您登录系统,您还可以提交新的报告。

如果您在 MySQL Server 中发现敏感的安全漏洞,请立即通过发送电子邮件至 通知我们。例外情况:支持客户应将所有问题(包括安全漏洞)报告给 Oracle 支持部门,网址为 http://support.oracle.com/

编写一份好的漏洞报告需要耐心,但如果第一次就做对了,就能为我们和您节省时间。一份好的漏洞报告,包含一个完整的漏洞测试用例,会极大地提高我们修复问题的可能性,而不是推迟修复时间。

本节将帮助您正确编写报告,这样您就不会浪费时间去做一些对我们没有帮助或帮助很小的事情。

如果您有一个可重复的漏洞报告,请将其报告到漏洞数据库,网址为 http://bugs.mysql.com/。任何我们能够重复的漏洞都很有可能得到较快的修复。

要报告其他问题,您可以使用 MySQL 邮件列表之一。

请记住,我们有可能回复包含太多信息的邮件,但无法回复包含太少信息的邮件。人们经常会省略一些事实,因为他们认为自己知道问题的根源,并且认为某些细节并不重要。

一个好的原则是这样的:如果您对是否陈述某件事有疑问,请陈述它。在您的报告中多写几行比等待更长时间才能得到答案要快且省事,因为如果我们必须要求您提供初始报告中缺少的信息,我们可能需要向您询问这些信息。

漏洞报告中最常见的错误是 (a) 未包含所使用的 Connector/J 或 MySQL 的版本号,以及 (b) 未完全描述 Connector/J 所安装的平台(包括 JVM 版本,以及 MySQL 本身所安装的平台类型和版本号)。

这些都是非常重要的信息,在 100 个漏洞报告中,有 99 个在没有这些信息的情况下是无用的。我们经常会收到类似这样的问题:“为什么这对我来说不起作用? 然后我们发现,所请求的功能在该 MySQL 版本中未实现,或者报告中描述的漏洞在更新的 MySQL 版本中已经修复。

有时错误是平台相关的;在这种情况下,如果我们不知道操作系统和平台的版本号,就几乎不可能修复任何问题。

如果可能,请创建一个可重复的、独立的测试用例,该用例不涉及任何第三方类。

为了简化此过程,我们为 Connector/J 提供了一个测试用例基类,名为 'com.mysql.cj.jdbc.util.BaseBugReport'。要使用此类为 Connector/J 创建测试用例,请创建自己的类,该类继承自 com.mysql.cj.jdbc.util.BaseBugReport 并在 setUp()tearDown()runTest() 方法中覆盖它们。

setUp() 方法中,创建代码来创建您的表,并用任何演示漏洞所需的数据填充它们。

runTest() 方法中,创建代码来演示漏洞,使用您在 setUp 方法中创建的表和数据。

tearDown() 方法中,删除您在 setUp() 方法中创建的任何表。

在上述三个方法中的任何一个中,使用 getConnection() 方法的变体之一来创建与 MySQL 的 JDBC 连接

  • getConnection() - 提供与 getUrl() 中指定的 JDBC URL 的连接。如果连接已经存在,则返回该连接,否则创建新的连接。

  • getNewConnection() - 如果您需要为您的漏洞报告获取新的连接(即,涉及多个连接),请使用此方法。

  • getConnection(String url) - 使用给定 URL 返回连接。

  • getConnection(String url, Properties props) - 使用给定 URL 和属性返回连接。

如果您需要使用与 'jdbc:mysql:///test' 不同的 JDBC URL,请覆盖 getUrl() 方法。

使用 assertTrue(boolean expression)assertTrue(String failureMessage, boolean expression) 方法来创建必须在您的测试用例中满足的条件,以演示您期望的行为(与您观察到的行为相反,这正是您可能要提交漏洞报告的原因)。

最后,创建一个 main() 方法,该方法创建一个新的测试用例实例,并调用 run 方法

public static void main(String[] args) throws Exception {
      new MyBugReport().run();
 }

完成测试用例后,并验证它演示了您要报告的漏洞,请将其与您的漏洞报告一起上传到 http://bugs.mysql.com/