Description
We recently promoted to RDS MySQL 8 in AWS and got the following error:
Error 1045 (28000): Access denied for user 'username'@'10.XXX.XXX.XXX' (using password: YES)
It all started because of this recent change in AWS: https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-rds-proxy-sha2-password-authentication-mysql-aurora-rds// . Apparently, connecting to RDS via a proxy now tries to promote the plugin to caching_sha2_password
.
Our Java apps connect successfully. Also, mysql
from CLI connects succesfully.
So this is what happens in code:
- The client tries to auth using plugin
mysql_native_password
. - The server responds with
[254 99 97 99 104 105 110 103 95 115 104 97 50 95 112 97 115 115 119 111 114 100 0 3 67 113 67 11 105 47 18 75 27 28 34 37 111 81 43 44 102 83 43 0]
. Let's analyze what you do with this packet in the following methodLine 485 in 85c6311
case iEOF
. The first null terminated string, is[99 97 99 104 105 110 103 95 115 104 97 50 95 112 97 115 115 119 111 114 100 0]
which translates tocaching_sha2_password
. So the server is trying to promote us tocaching_sha2_password
as expected. TheauthData
which is later used to scramble the SHA256 is the rest of the packet, however you are forgetting to strip the null termination from it. The current code is:
authData := data[pluginEndIndex+1:]
which in our case is [3 67 113 67 11 105 47 18 75 27 28 34 37 111 81 43 44 102 83 43 0]
- i.e., null terminated.
For testing purposes, I stripped the 0 from the end, by changing it to:
authData := data[pluginEndIndex+1 : len(data)-1]
and now the client connects successfully and performs the queries without Access denied.
Thanks