Database administrators have the possibility to set lifetimes for user passwords. This can be considered a security feature, so that passwords get updated regularly. But if one of your software services logs into the database with such an account, you want to know when the password expires in good time before this happens, so that you can update the password. Otherwise your service will stop working unexpectedly.
Of course, you can mark the date in your calendar in order to be reminded beforehand, and you probably should. But there is an additional measure you can take. The database administrator can not only set the lifetime of a password, but also a “grace period”. For example:
ALTER PROFILE app_user LIMIT PASSWORD_LIFE_TIME 180 PASSWORD_GRACE_TIME 14;
This SQL command sets the password life time to 180 days (roughly six months) and the grace period to 14 days (two weeks). If you log into the database with this user you will see a warning two weeks before the password will expire. For Oracle databases the warning looks like this:
ORA-28002: the password will expire within 14 days
But your service logs in automatically, without any user interaction. Is it possible to programmatically detect a warning like this? Yes, it is. For example, with JDBC the following code detects warnings after a connection was established:
// Error codes for ORA-nnnnn warnings static final int passwordWillExpireSoon = 28002; static final int accountWillExpireSoon = 28011; void handleWarnings(Connection connection) throws SQLException { SQLWarning warning = connection.getWarnings(); while (null != warning) { String message = warning.getMessage(); log.warn(message); int code = warning.getErrorCode(); if (code == passwordWillExpireSoon) { System.out.println("ORA-28002 warning detected"); // handle appropriately } if (code == accountWillExpireSoon) { System.out.println("ORA-28011 warning detected"); // handle appropriately } warning = warning.getNextWarning(); } }
Instead of just logging the warnings, you can use this code to send an email to your address, so that you will get notified about a soon-to-be-expired password in advance. The error code depends on your database system.
With this in place you should not be unpleasantly surprised by an expired password. Of course, this only works if the administrator sets a grace period, so you should agree on this approach with your administrator.