[CONJ-129] java client fails to support socket authentication Created: 2014-12-27  Updated: 2016-05-23  Resolved: 2016-05-23

Status: Closed
Project: MariaDB Connector/J
Component/s: Other
Affects Version/s: 1.1.7
Fix Version/s: 1.4.0

Type: Task Priority: Minor
Reporter: Daniel Black Assignee: Diego Dupin
Resolution: Fixed Votes: 1
Labels: None
Environment:

java version "1.7.0_71"
OpenJDK Runtime Environment (fedora-2.5.3.3.fc20-x86_64 u71-b14)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

jna 4.1.0 (https://github.com/twall/jna)



 Description   

Using MariaDB Java Client 1.1.7 and Sql Workbench Build 119 I loaded the MariaDB Java Client in as a Driver with jna 4.1.0 and used a url of: jdbc:mariadb://localhost/mysql?localSocket=/home/dan/software_projects/mariadb-trunk/mysql-test/var/tmp/mysqld.2.sock

I used username dan corresponding to my local user.

Grants where created

MariaDB [mysql]> install plugin unix_socket soname 'auth_socket';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> grant all on *.* to 'dan'@'localhost' identified via 'unix_socket' with grant option;

The application returned java backtrace of:

2014-12-27 17:22 INFO  Creating new connection for [{Default group}/MariaDB - socket - socket auth] for driver=org.mariadb.jdbc.Driver and URL=[jdbc:mariadb://localhost/mysql?localSocket=/home/dan/software_projects/mariadb-trunk/mysql-test/var/tmp/mysqld.2.sock] 
2014-12-27 17:22 ERROR Error connecting to the database using URL=jdbc:mariadb://localhost/mysql?localSocket=/home/dan/software_projects/mariadb-trunk/mysql-test/var/tmp/mysqld.2.sock, username=dan Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client [SQL State=HY0000, DB Errorcode=-1] 
java.sql.SQLException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
	at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:149)
	at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106)
	at org.mariadb.jdbc.Driver.connect(Driver.java:114)
	at workbench.db.DbDriver.connect(DbDriver.java:429)
	at workbench.db.ConnectionMgr.connect(ConnectionMgr.java:228)
	at workbench.db.ConnectionMgr.getConnection(ConnectionMgr.java:158)
	at workbench.gui.components.ConnectionSelector.doConnect(ConnectionSelector.java:233)
	at workbench.gui.components.ConnectionSelector$2.run(ConnectionSelector.java:133)
Caused by: org.mariadb.jdbc.internal.common.QueryException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.checkErrorPacket(MySQLProtocol.java:526)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:480)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:673)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.<init>(MySQLProtocol.java:266)
	at org.mariadb.jdbc.Driver.connect(Driver.java:110)
	... 5 more
 
2014-12-27 17:22 ERROR SQL Exception when connecting Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
java.sql.SQLException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
	at workbench.db.DbDriver.connect(DbDriver.java:460)
	at workbench.db.ConnectionMgr.connect(ConnectionMgr.java:228)
	at workbench.db.ConnectionMgr.getConnection(ConnectionMgr.java:158)
	at workbench.gui.components.ConnectionSelector.doConnect(ConnectionSelector.java:233)
	at workbench.gui.components.ConnectionSelector$2.run(ConnectionSelector.java:133)
Caused by: java.sql.SQLException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
	at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:149)
	at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106)
	at org.mariadb.jdbc.Driver.connect(Driver.java:114)
	at workbench.db.DbDriver.connect(DbDriver.java:429)
	... 4 more
Caused by: org.mariadb.jdbc.internal.common.QueryException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.checkErrorPacket(MySQLProtocol.java:526)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:480)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:673)
	at org.mariadb.jdbc.internal.mysql.MySQLProtocol.<init>(MySQLProtocol.java:266)
	at org.mariadb.jdbc.Driver.connect(Driver.java:110)
	... 5 more
 
and an error:
 
Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client



 Comments   
Comment by Jaakko Kantojärvi [ 2015-03-05 ]

I can confirm this with connector versions 1.1.6, 1.1.7 and 1.1.8. Using oracle java 1.8.40 and mariadb 10.0.
I'm trying to install atlassian confluence with mariadb and I get:
java.sql.SQLException: Could not connect: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
class: org.mariadb.jdbc.Driver
dburi: jdbc:mariadb://localhost/confluence?sessionVariables=storage_engine%3DInnoDB&useUnicode=true&characterEncoding=utf8&localSocket=/run/mysqld/mysqld.sock

Comment by Daniel Black [ 2015-07-13 ]

Here are the changes I did to a python implement to make this happen https://github.com/PyMySQL/PyMySQL/pull/353

The key aspect is adding plugin_auth to the capabilities on connection ( https://github.com/MariaDB/mariadb-connector-j/blob/master/src/main/java/org/mariadb/jdbc/internal/mysql/MySQLProtocol.java#L425 ). That might be all that is required.

Comment by Daniel Black [ 2015-07-13 ]

all patched and working:

https://github.com/MariaDB/mariadb-connector-j/pull/21

tested on password and unix_socket authentication (mariadb-10.1).

debugging tip of the day: socat -x -v UNIX-LISTEN:/tmp/db.sock,fork UNIX:/var/lib/mysql/mysql.sock

Comment by Daniel Black [ 2015-08-06 ]

so is https://github.com/MariaDB/mariadb-connector-j/pull/22 a good start?

Comment by Diego Dupin [ 2016-05-23 ]

"plugin_authentication" like "unix_socket" has been implemented in 1.4.

Generated at Thu Feb 08 03:13:23 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.