changer L'état du compte D'utilisateur Oracle D'expirer (GRACE) à ouvrir
Après avoir reçu le message Your password will be expired with in 7 days
, j'ai changé le mot de passe expirent les jours du default
profil de UNLIMITED
. Mais le statut de compte de certains utilisateurs sont toujours enEXPIRE(GRACE)
.
N'importe quelle façon de changer L'état du compte D'utilisateur D'Oracle de EXPIRE(GRACE)
OPEN
sans réinitialiser le mot de passe?
4 réponses
Non, vous ne pouvez pas changer l'état D'un compte de expirer(GRACE) pour ouvrir sans réinitialiser le mot de passe.
documentation dit:
si vous faites expirer le mot de passe d'un utilisateur de base de données avec le mot de passe Expirez, puis l'utilisateur (ou le DBA) doit changer le mot de passe avant tentative d'ouverture de session dans la base de données après l'expiration.
cependant, vous pouvez changer le statut pour ouvrir en réinitialisant le mot de passe de l'utilisateur à de la même valeur.
en fonction de votre version et de votre configuration, une de ces requêtes vous obtiendra probablement le hash mot de passe:
select spare4 from sys.user$ where name='[user name]';
select password from dba_users where username = '[user name]';
puis utilisez ceci pour le réinitialiser:
alter user [user name] identified by values '[result from above query]';
Compilation de jonearles réponse, http://kishantha.blogspot.com/2010/03/oracle-enterprise-manager-console.html et http://blog.flimatech.com/2011/07/17/changing-oracle-password-in-11g-using-alter-user-identified-by-values/ (Oracle 11g):
- Connexion à sqlplus en tant que sysdba -> sqlplus "/as sysdba"
- Exécuter ->
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED;
Pour réinitialiser le statut des utilisateurs, exécutez la requête:
select
'alter user ' || su.name || ' identified by values'
|| ' ''' || spare4 || ';' || su.password || ''';'
from sys.user$ su
join dba_users du on ACCOUNT_STATUS like 'EXPIRED%' and su.name = du.username;
et exécute une partie ou la totalité du jeu de résultats.
set long 9999999
set lin 400
select DBMS_METADATA.GET_DDL('USER','YOUR_USER_NAME') from dual;
Ceci affichera quelque chose comme ceci:
SQL> select DBMS_METADATA.GET_DDL('USER','WILIAM') from dual;
DBMS_METADATA.GET_DDL('USER','WILIAM')
--------------------------------------------------------------------------------
CREATE USER "WILIAM" IDENTIFIED BY VALUES 'S:6680C1468F5F3B36B726CE7620F
FD9657F0E0E49AE56AAACE847BA368CEB;120F24A4C2554B4F'
DEFAULT TABLESPACE "USER"
TEMPORARY TABLESPACE "TEMP"
PASSWORD EXPIRE
SQL>
il suffit d'utiliser le premier morceau de cela avec alter user à la place:
ALTER USER "WILIAM" IDENTIFIED BY VALUES 'S:6680C1468F5F3B36B726CE7620F
FD9657F0E0E49AE56AAACE847BA368CEB;120F24A4C2554B4F';
cela permet de remettre le compte en état D'ouverture sans changer le mot de passe (à condition de couper et coller correctement la valeur de hachage à partir de la sortie de DBMS_METADATA).GET_DDL) et vous n'avez même pas besoin de savoir quel est le mot de passe.
si vous connaissez le mot de passe de cet utilisateur, ou si vous voulez le deviner, faites ce qui suit:
connect user/password
si cette commande se connecte avec succès, vous verrez le message "connecté", sinon vous verrez un message d'erreur. Si vous êtes alors la journalisation successufull, cela signifie que vous connaissez le mot de passe. Dans ce cas, il suffit de faire:
alter user NAME_OF_THE_USER identified by OLD_PASSWORD;
et cela réinitialisera le mot de passe au même mot de passe qu'avant et également réinitialiser le account_status pour cet utilisateur.