201 votes

Comment désactiver l'expiration du mot de passe Oracle ?

J'utilise Oracle pour le développement. Le mot de passe d'un compte bootstrap que j'utilise toujours pour reconstruire ma base de données a expiré.

Comment désactiver définitivement l'expiration du mot de passe pour cet utilisateur (et tous les autres utilisateurs) ?

J'utilise Oracle 11g, dont les mots de passe expirent par défaut.

0 votes

Je pense que vous feriez mieux de poser cette question sur serverfault.com. Je ne vais pas te forcer parce que tu as dit que tu l'utilisais pour le développement, et je pense qu'il y a toujours une chance que quelqu'un ici sache et/ou que d'autres ici puissent bénéficier de cette information.

0 votes

Je pense que c'est ce que je vais faire. Je me demandais pour quel site il était le plus approprié, puisqu'il s'agit d'une question de base sur les bases de données et non d'une question de DBA.

0 votes

Je ne sais pas quelle est la politique de duplication pour les questions intersites, mais voici le lien : serverfault.com/questions/37622/

362voto

Pedro Carriço Points 1214

Pour modifier la politique d'expiration du mot de passe pour un certain profil d'utilisateur dans Oracle, vérifiez d'abord quel profil l'utilisateur utilise :

select profile from DBA_USERS where username = '<username>';

Vous pouvez ensuite modifier la limite pour qu'elle n'expire jamais en utilisant :

alter profile <profile_name> limit password_life_time UNLIMITED;

Si vous voulez vérifier au préalable la limite que vous pouvez utiliser :

select resource_name,limit from dba_profiles where profile='<profile_name>';

6 votes

Cela a modifié le profil. Cependant, j'ai des utilisateurs dont les mots de passe sont configurés pour expirer parce que le profil par défaut le prévoyait ainsi lorsqu'ils ont été créés. Comment puis-je modifier ces comptes utilisateurs pour que le mot de passe n'expire pas ?

18 votes

select username,expiry_date,account_status from dba_users; pour voir l'état du compte. Pour les comptes qui expirent, vous devrez peut-être réinitialiser le mot de passe une dernière fois.

7 votes

Modifier le compte de l'utilisateur aaa pour le déverrouiller ;

106voto

Shimon Pozin Points 131

Pour développement vous pouvez désactiver la politique de mot de passe si aucun autre profil n'a été défini (c'est-à-dire désactiver l'expiration du mot de passe dans le profil par défaut) :

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Ensuite, réinitialisez le mot de passe et déverrouillez le compte utilisateur. Il ne devrait plus jamais expirer :

alter user user_name identified by new_password account unlock;

46voto

Kieron Hardy Points 71

Comme l'indiquent les autres réponses, le fait de modifier le profil de l'utilisateur (par exemple le profil "par défaut") de manière appropriée permet d'obtenir des mots de passe qui, une fois définis, n'expirent jamais.

Cependant, comme le souligne un commentateur, les mots de passe définis sous les anciennes valeurs du profil peuvent déjà avoir expiré et (si le délai de grâce spécifié pour le profil est dépassé) le compte peut être verrouillé.

La solution pour les mots de passe expirés avec des comptes verrouillés (comme indiqué dans un commentaire de réponse) est d'utiliser une version de la commande ALTER USER :

ALTER USER xyz_user ACCOUNT UNLOCK;

Cependant, la commande de déverrouillage ne fonctionne que pour les comptes où le compte est effectivement verrouillé, mais pas pour les comptes qui sont dans la période de grâce, c'est-à-dire où le mot de passe est expiré mais le compte n'est pas encore verrouillé. Pour ces comptes, le mot de passe doit être réinitialisé avec une autre version de la commande ALTER USER :

ALTER USER xyz_user IDENTIFIED BY new_password;

Vous trouverez ci-dessous un petit script SQL*Plus qu'un utilisateur privilégié (par exemple l'utilisateur 'SYS') peut utiliser pour réinitialiser le mot de passe d'un utilisateur à la valeur hachée existante actuelle stockée dans la base de données.

EDIT : Les anciennes versions d'Oracle stockent le mot de passe ou le password-hash dans la colonne pword, les nouvelles versions d'Oracle stockent le password-hash dans la colonne spare4. script ci-dessous a été modifié pour collecter les colonnes pword et spare4, mais pour utiliser la colonne spare4 pour réinitialiser le compte de l'utilisateur ; modifiez selon les besoins.

REM Tell SQL*Plus to show before and after versions of variable substitutions.
SET VERIFY ON
SHOW VERIFY

REM Tell SQL*Plus to use the ampersand '&' to indicate variables in substitution/expansion.
SET DEFINE '&'
SHOW DEFINE

REM Specify in a SQL*Plus variable the account to 'reset'.
REM Note that user names are case sensitive in recent versions of Oracle.
REM DEFINE USER_NAME = 'xyz_user'

REM Show the status of the account before reset.
SELECT
  ACCOUNT_STATUS,
  TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
  TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
  DBA_USERS
WHERE
  USERNAME = '&USER_NAME';

REM Create SQL*Plus variable to hold the existing values of the password and spare4 columns.
DEFINE OLD_SPARE4 = ""
DEFINE OLD_PASSWORD = ""

REM Tell SQL*Plus where to store the values to be selected with SQL.
REM Note that the password hash value is stored in spare4 column in recent versions of Oracle,
REM   and in the password column in older versions of Oracle.
COLUMN SPARE4HASH NEW_VALUE OLD_SPARE4
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD

REM Select the old spare4 and password columns as delimited strings 
SELECT 
  '''' || SPARE4 || '''' AS SPARE4HASH,
  '''' || PASSWORD || '''' AS PWORDHASH
FROM 
  SYS.USER$ 
WHERE 
  NAME = '&USER_NAME';

REM Show the contents of the SQL*Plus variables
DEFINE OLD_SPARE4
DEFINE OLD_PASSWORD

REM Reset the password - Older versions of Oracle (e.g. Oracle 10g and older) 
REM ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD;

REM Reset the password - Newer versions of Oracle (e.g. Oracle 11g and newer) 
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_SPARE4;

REM Show the status of the account after reset
SELECT
  ACCOUNT_STATUS,
  TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
  TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
  DBA_USERS
WHERE
  USERNAME = '&USER_NAME';

2 votes

Merci pour votre aide. C'est tellement difficile de trouver une réponse pertinente. Toutes les autres réponses font uniquement référence au PASSWORD_LIFE_TIME.

0 votes

La colonne SYS.USER$.PASSWORD contiendra uniquement le hachage de la version NON sensible à la casse (majuscules ?) du mot de passe. Dans Oracle 11, à moins que vous ne définissiez le paramètre système SEC_CASE_SENSITIVE_LOGON=FALSE, il y aura un hachage beaucoup plus long du mot de passe sensible à la casse dans la colonne SYS.USER$.SPARE4.

16voto

akf Points 23518

Je crois que le comportement d'expiration du mot de passe, par défaut, est de ne jamais expirer. Cependant, vous pouvez configurer un profil pour votre ensemble d'utilisateurs de développement et définir l'option PASSWORD_LIFE_TIME . Voir le orafaq pour plus de détails. Vous pouvez voir ici pour un exemple de la perspective et de l'usage d'une personne.

7 votes

Je pense que dans une installation 11g récente (par opposition à une mise à jour) avec la sécurité améliorée recommandée, les mots de passe expireront par défaut après 30 jours.

2 votes

0voto

Pawan Kumar Points 28

Je dirais que ce n'est pas une bonne idée de désactiver l'expiration du mot de passe, car cela peut entraîner des menaces possibles pour la confidentialité, l'intégrité et la disponibilité des données.

Cependant, si vous le souhaitez.

Si vous avez un accès approprié, utilisez le SQL suivant

SELECT username, account_status FROM dba_users ;

Cela devrait vous donner un résultat comme celui-ci.

   USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

SYSTEM                         OPEN
SYS                            OPEN
SDMADM                         OPEN
MARKETPLACE                    OPEN
SCHEMAOWNER                    OPEN
ANONYMOUS                      OPEN
SCHEMAOWNER2                   OPEN
SDMADM2                        OPEN
SCHEMAOWNER1                   OPEN
SDMADM1                        OPEN
HR                             EXPIRED(GRACE)

USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

APEX_PUBLIC_USER               LOCKED
APEX_040000                    LOCKED
FLOWS_FILES                    LOCKED
XS$NULL                        EXPIRED & LOCKED
OUTLN                          EXPIRED & LOCKED
XDB                            EXPIRED & LOCKED
CTXSYS                         EXPIRED & LOCKED
MDSYS                          EXPIRED & LOCKED

Maintenant vous pouvez utiliser la réponse de Pedro Carriço https://stackoverflow.com/a/6777079/2432468

1 votes

Si je suis d'accord pour dire qu'il est imprudent de désactiver l'expiration des mots de passe dans les environnements de production, nous pourrions vouloir la désactiver dans les environnements de développement ou de test.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X