You may see some users in your 12c database that have the password versions set to 10G:
select username, password_versions from dba_users where username='SCOTT'; USERNAME PASSWORD_VERSIONS -------------------- ----------------- SCOTT 10G
At the same time, most other users have their password_versions set to the value 10G 11G 12C.
Oracle uses different password versions in all these three versions:
* Oracle 11g it uses SHA1 password based version
* Oracle 10g uses DES based version.
* Oracle 12c uses SHA-2-based SHA-512 password version
Since the Oracle 12c database runs in exclusive mode by default, users with passwords generated in previous versions
will not be able to login (exclusive mode means that the SQLNET.ALLOWED_LOGON_VERSION_SERVER is set either to 12 or 12a).
Workaround is to force a password reset so that the password is generated for the current version.
But before you do that, you need to change the database's minimum allowed authentication protocol.
This is done by editing the file $TNS_ADMIN/sqlnet.ora.
The parameter controlling the sqlnet authentication protocol is SQLNET.ALLOWED_LOGON_VERSION_SERVER.
Here is how I did it:
1. Find the user(s) with password versions of 10G
select username, password_versions from dba_users where password_versions = '10G';
I have found cases where there is a space after the string '10G' so that you need to actually search for the string '10G '.
2. Edit the $TNS_ADMIN/sqlnet.ora file so that the database doesn't run in exclusive mode. Add
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11
3. Restart database
4. Expire the user(s) that you want to force a password reset for:
alter user SCOTT password expire;
5. Try to connect as the user:
connect SCOTT Enter password: ERROR: ORA-28001: the password has expired Changing password for SCOTT New password: Retype new password: Password changed Connected.
Check that the users now has the correct password version:
select username, password_versions,account_status from dba_users where username='SCOTT'; USERNAME PASSWORD_VERSIONS ACCOUNT_STATUS -------------------- ----------------- -------------------------------- SCOTT 10G 11G 12C OPEN
6. When all the affected users have been changed, set the database to run in exclusive mode.
Change the SQLNET.ALLOWED_LOGON_VERSION_SERVER from 11 to 12 in $TNS_ADMIN/sqlnet.ora, and restart once more.