Я настраиваю программу Java, которая получает токен RDS для AWS и использует его для подключения к базе данных MySql, размещенной на RDS.
Это код для получения токена.
RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
.credentials(creds)
.region(region)
.build();
String authToken = generator.getAuthToken(
GetIamAuthTokenRequest.builder()
.hostname(hostName)
.port(Integer.parseInt(port))
.userName(username)
.build());
Проблема в том, что он всегда генерирует токен, даже если пользователь IAM не имеет разрешения на доступ к этому ресурсу или если пользовательили имя хоста или имя пользователя недопустимы или не существуют.
Это приводит к ошибке MySql при попытке доступа к базе данных. Обычно выдает это исключение.
java.sql.SQLException: Access denied for user 'username' (using password: YES)
Я хотел бы выдать и пропустить более подходящее и описательное исключение. Есть ли способ проверить, является ли токен RDS действительным, прежде чем пытаться подключиться к базе данных? Если да, то можете ли вы найти причину, по которой он недействителен? (т. е. пользователь не имеет правильных разрешений или ресурс не существует)
В качестве альтернативы, способ создания исключения перед тем, как он генерирует недопустимый токен, также будет приемлемым.