Bug #88172 AbandonedConnectionCleanupThread does not handle SecurityException
| Submitted: | 21 Oct 2017 8:17 | Modified: | 9 Sep 2025 19:17 |
|---|---|---|---|
| Reporter: | Stephen Booth | Email Updates: | |
| Status: | Won't fix | Impact on me: | |
| Category: | Connector / J | Severity: | S3 (Non-critical) |
| Version: | 5.1.42 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | SecurityException, securityManager | ||
[23 Oct 2017 13:32]
Chiranjeevi Battula
Hello Stephen, Thank you for the bug report. Verified based on internal discussion with dev's. Thanks, Chiranjeevi.
[9 Sep 2025 19:15]
Filipe Silva
Posted by developer: Thread.setContextClassLoader isn't the only operation that can trigger an AccessControlException; even reading system properties can. Avoiding the exception in AbandonedConnectionCleanupThread alone isn’t sufficient for the driver to work. A better option would be to include the necessary grants in the conf/catalina.policy file. As of Connector/J 9.4.0, the following permissions allow minimal usage of the driver, but others may be needed depending on the features in use: - permission java.util.PropertyPermission "com.mysql.cj.disableAbandonedConnectionCleanup", "read"; - permission java.util.PropertyPermission "javax.net.*", "read"; - permission java.lang.RuntimePermission "setContextClassLoader"; - permission java.net.SocketPermission "*:*", "connect,resolve"; Permissions can also be granted on a per-jar basis, so I recommend defining a dedicated section for the Connector/J JAR file. That said, keep in mind that SecurityManager has been deprecated in Java 17 and is expected to be removed in a future Java release. Because of this, it’s possible that this issue may never be addressed.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.043 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: The AbandonedConnectionCleanupThread calls Thread.setContextClassLoader in a static block which may throw a SecurityException if a SecurityManager is in place. This can prevent the driver class from instantiating in tomcat with the -security flag enabled. Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "setContextClassLoader") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.security.AccessController.checkPermission(AccessController.java:884) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.Thread.setContextClassLoader(Thread.java:1474) at com.mysql.jdbc.AbandonedConnectionCleanupThread$1.newThread(AbandonedConnectionCleanupThread.java:50) at java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:619) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:932) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1367) How to repeat: Run Class.forName("com.mysql.jdbc.Driver") from a tomcat application when tomcat is run with the -security flag. Same in test class with a security.policy file that dis-allows setContextClassLoader Suggested fix: Trap the exception Running with the thread classloader is better than not loading at all.