Большинство баз данных, включая все базы данных в RDS, не закрывают сеансы / соединения при смене пароля (например, см. Этот ответ для oracle ). Для завершения сеансов требуются явные команды завершения.
Если вы используете Java и диспетчер пулов соединений, вы можете использовать предоставляемую AWS JDBC-оболочку для автоматического получения последнего пароля, когда ваши соединения необходимо восстановить.
Я могу проверить это:
- Раскрутка экземпляра MySQL RDS
- Хранение мастер-пароля в Secrets Manager
- Настройка ротации одного пользователя через консоль
- Подключение к БД с помощью MySQL CLI
- Проверьте соединение с помощью запроса
- Оставьте соединение открытым, запустив подоболочку из CLI
- Дамп текущего пароля
- Запустите асинхронное вращение и немного подождите
- Проверьте вращение, набрав новый пароль
- Вернитесь к существующему соединению MySQL в CLI, выйдя из подоболочки
- Выполнить другой запрос
$ mysql -h testdb -Dmysql -u root -p$(aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password')
...
mysql> select user from user;
+-----------+
| user |
+-----------+
| root |
| mysql.sys |
| rdsadmin |
+-----------+
3 rows in set (0.05 sec)
mysql> \! bash
$ # Show current password
$ aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password'
3%c70'-e9s<Dy5ecX-(0mV%&E6Y[<jnJ
$ aws --region us-east-2 secretsmanager rotate-secret --secret-id testdb-root
...
$ sleep 60 # Give rotation time to complete
$ aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password'
.z,B{,P]jE~pr3?0mZ5H,6rJi;aXrQVO
$ exit
mysql> select user from user;
+-----------+
| user |
+-----------+
| root |
| mysql.sys |
| rdsadmin |
+-----------+
3 rows in set (0.05 sec)