如果发现MySQL中存在敏感的安全缺陷,请发送电子邮件至security@mysql.com。
编写良好的缺陷报告需要耐心,但在第1时间正确地完成它不仅能节省我们的时间,也能节省你自己的时间。良好的缺陷报告应包含对缺陷的完整测试情况,以便我们你能够在下个版本中更正该缺陷。
本节介绍的内容用于帮助你正确地编写报告,从避免将你的时间浪费在对我们帮助不大或没有帮助的事上,
如果有1份可重复的缺陷报告,请将其提交到缺陷数据库,http://bugs.mysql.com/。
对于任何我们能再现的缺陷,在下一个MySQL版本中修正它的机会很大。
要想通报其他问题,请使用MySQL邮件列表。
请注意,我们可能会对包含过多信息的消息作出响应,但不太会对包含过少信息的消息作出回应。人们常会省略掉一些事实,因为他们认为自己知道了故障的原因,并想当然地认为这类细节无关紧要。
良好的原则是:如果你对陈述某事犹豫不定,请陈述之。如果我们要求你提供初始报告中缺少的信息,在报告中编写多行信息源比等候回复要快,麻烦也更小。
在缺陷报告,最常犯的错误包括:(a)未包含所使用Connector/J或MySQL的版本号,以及(b)未完全描述安装了Connector/J的平台(包括JVM版本,平台类型,以及所安装MySQL本身的版本号)。
这是高度相关的信息,如果没有它,99%的缺陷报告无用。我们遇到这类问题,“为何它对我没用”? 随后,我们发现在该MySQL版本中,所请求的特性尚未实施,或在较新的MySQL版本中已更正了报告中描述的缺陷。
有些时候,错误与平台相关,在这类情况下,如果不知道操作系统和平台的版本号,我们几乎不可能更正任何问题。
如果可能,你应创建1份可重复的、不含任何第三方类的独立测试案例。
为了是该进程流线化,我们与Connector/J一起提供了用于测试的基本类,名为com.mysql.jdbc.util.BaseBugReport。要想使用该类为Connector/J创建1个测试案例,你应应创建自己的从com.mysql.jdbc.util.BaseBugReport继承的类,并覆盖方法setUp()、tearDown()和runTest()。
在setUp()方法中,创建用于创建表的代码,并用演示缺陷所需的数据填充表。
在runTest ()方法中,使用在“setUp”方法中创建的表和数据,创建用于演示缺陷的代码。
在tearDown()方法中,撤销在setUp()方法中创建的任何表。
对于上述三种方法中的任何一种,应使用getConnection ()各种变体中的一种创建与MySQL的JDBC连接。
· getConnection():提供了与在getUrl()中指定的JDBC URL的连接。如果连接已存在,返回该连接,否则将创建新的连接。
· getNewConnection():如果需要为缺陷报告获得新的连接(即包含1个以上的连接),应使用它。
· 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/。