29 septembre 2011

ORA-28002: the password will expire within 6 days / ORA-28011: the account will expire soon / ORA-28000: the account is locked

Profil des comptes Oracle


A compter de Oracle v10, les comptes utilisent un profil par défaut avec les propriétés suivantes :

select * from dba_profiles where resource_type='PASSWORD' order by profile;
 
PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10
DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD 180
DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD UNLIMITED
DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD 7
DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD NULL
DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD 1
DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED

Un mot de passe est donc valide 6 mois, et le compte est verrouillé après 10 tentatives de connexion infructueuses (ce qui va très vite si on démarre HR Access avec un objet Topologie HRS mal renseigné).

On aura alors blocage du compte :

select username, profile, account_status from dba_users where username='HR';
 
USERNAME         PROFILE              ACCOUNT_STATUS
- - - - - - - - - - - - - - - - - - - - - - - - -
HR               DEFAULT              LOCKED

Attribuer à HR un profil spécifique


Ci dessous on crée un profil différent du profil par défaut, sans limitations.

CREATE PROFILE HR
LIMIT
SESSIONS_PER_USER          UNLIMITED
CPU_PER_SESSION            UNLIMITED
CPU_PER_CALL               UNLIMITED
CONNECT_TIME               UNLIMITED
IDLE_TIME                  UNLIMITED
LOGICAL_READS_PER_SESSION  UNLIMITED
LOGICAL_READS_PER_CALL     UNLIMITED
PRIVATE_SGA                UNLIMITED
COMPOSITE_LIMIT            UNLIMITED
FAILED_LOGIN_ATTEMPTS      UNLIMITED
PASSWORD_LIFE_TIME         UNLIMITED
PASSWORD_REUSE_TIME        UNLIMITED
PASSWORD_REUSE_MAX         UNLIMITED
PASSWORD_LOCK_TIME         UNLIMITED
PASSWORD_GRACE_TIME        UNLIMITED
PASSWORD_VERIFY_FUNCTION   NULL;

Puis on l'attribue au compte HR :
ALTER USER HR PROFILE HR;

Débloquer le compte


Pour supprimer le verrouillage, se connecter avec le compte administrateur et exécuter l'ordre suivant :
ALTER USER HR ACCOUNT UNLOCK;

NB : si vous êtes sous Unix et que votre compte est dans le groupe "dba", cela se fait par la commande "sqlplus / as sysdba". Sinon il vous faut connaitre le mot de passe du compte "system". Attention : si vous n'avez pas un minimum de compétence Oracle, passez la main à un administrateur plutôt que de casser quelque chose ...

Pour supprimer le warning ORA-28011, le seul moyen que j'ai trouvé est de repositionner l'ancien mot de passe :
ALTER USER HR IDENTIFIED BY ...;

1 commentaire:

  1. Pour être tranquille on peut aussi supprimer l'expiration du mot de passe:

    On vérifie le profil du user HR
    select profile from DBA_USERS where username = 'HR';

    Et modifier l’expiration du profil
    alter profile DEFAULT limit password_life_time UNLIMITED;

    RépondreSupprimer