2009-07-08 11 views
145

J'utilise Oracle pour le développement. Le mot de passe d'un compte d'amorçage que j'utilise toujours pour reconstruire ma base de données a expiré. Comment désactiver l'expiration du mot de passe pour cet utilisateur (et tous les autres utilisateurs) de façon permanente? J'utilise Oracle 11g, dont les mots de passe expirent par défaut.Comment désactiver l'expiration du mot de passe Oracle?

+0

Je pense que vous pourriez être mieux demander cela sur serverfault.com. Je ne vais pas le forcer parce que vous avez dit que vous l'utilisiez pour le développement, et je pense qu'il y a encore une chance que quelqu'un ici le sache et/ou que d'autres ici puissent bénéficier de cette information. –

+0

Je pense que je ferai juste cela. Je discutais sur le site pour lequel il était le plus approprié, puisqu'il s'agit d'une question de base de données de base et non d'un problème de DBA. –

+0

Je ne sais pas ce que la politique dupe est pour les questions inter-site, mais voici le lien: http://serverfault.com/questions/37622/how-do-i-turn-off-oracle-password-expiration –

Répondre

253

Pour Modifions le mot de passe politique d'expiration d'un certain profil d'utilisateur dans Oracle d'abord vérifier le profil Wich l'utilisateur est à l'utilisation:

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

Ensuite, vous pouvez modifier la limite à ne jamais expirer en utilisant:

alter profile <profile_name> limit password_life_time UNLIMITED; 

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

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

Cela a modifié le profil. Cependant, j'ai des utilisateurs dont les mots de passe sont expirés parce que le profil par défaut l'avait comme tel quand ils ont été créés. Comment puis-je modifier ces comptes d'utilisateur afin que le mot de passe n'expire pas? –

+9

'sélectionner le nom d'utilisateur, expiry_date, account_status de dba_users;' pour afficher le compte_status. Pour les comptes expirant, vous devrez peut-être réinitialiser le mot de passe une fois pour la dernière fois. –

+4

alter utilisateur aaa compte déverrouiller; –

16

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

+7

Je pense à une nouvelle installation 11g (par opposition à une mise à niveau) avec la sécurité améliorée recommandée, les mots de passe expirera par défaut après 30 jours. –

+1

Sur 11g c'est 180 jours: http://docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/task_WorkingWithOracle11gSecurityFeatures-3e78fd.html –

77

Fo r développement Vous pouvez désactiver la stratégie de mot de passe si aucun autre profil n'a été défini (par ex. désactiver l'expiration du mot de passe par défaut un):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

Ensuite, réinitialisez le mot de passe et déverrouillez le compte d'utilisateur. Il ne doit jamais expirer à nouveau:

alter user user_name identified by new_password account unlock; 
+0

Merci, ça marche tout simplement bien! – grep

32

Comme l'autre état de réponses, en changeant le profil de l'utilisateur (par exemple, le profil « DEFAULT ») de façon appropriée, conduire à des mots de passe, qu'une fois défini, ne sera jamais fin. Toutefois, comme le fait remarquer un intervenant, 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é du profil a été atteint), le compte est verrouillé.

La solution pour les mots de passe expirés avec les comptes verrouillés (comme prévu 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 réellement verrouillé, mais pas pour les comptes qui sont dans la période de grâce, où le mot de passe a expiré, mais le compte n'est pas encore verrouillé. Pour ces comptes le mot de passe doit être remis à zéro avec une autre version de la commande ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password; 

Voici une petite SQL * Plus script 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 stockée dans la base de données.

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 variable substitution expansion 
SET DEFINE '&' 
SHOW DEFINE 

REM Specify in a SQL*Plus variable the account to 'reset' 
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 
FROM 
    DBA_USERS 
WHERE 
    USERNAME = '&USER_NAME'; 

REM Create a SQL*Plus variable to hold the hash of existing password 
DEFINE OLD_PASSWORD = "" 

REM Tell SQL*Plus where to store the value to be selected with SQL 
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD 

REM Select the old hash password as a delimited string 
SELECT 
    '''' || PASSWORD || '''' AS PWORDHASH 
FROM 
    SYS.USER$ 
WHERE 
    NAME = '&USER_NAME'; 

REM Show the contents of the SQL*Plus variable 
DEFINE OLD_PASSWORD 

REM Reset the password 
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD; 

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 
FROM 
    DBA_USERS 
WHERE 
    USERNAME = '&USER_NAME'; 
+0

Très gentil, merci – dreyln

+1

Merci pour l'aide. C'est tellement difficile de trouver une réponse pertinente. Chaque autre réponse se rapporte uniquement à PASSWORD_LIFE_TIME. – sabertiger

+0

La colonne SYS.USER $ .PASSWORD contient uniquement le hachage de la version NON-majuscule (majuscule?) Du mot de passe. Dans Oracle 11, sauf si vous définissez le paramètre système SEC_CASE_SENSITIVE_LOGON = FALSE, le hachage du mot de passe sensible à la casse sera beaucoup plus long dans la colonne SYS.USER $ .SPARE4. – Morbo

1

Je proposerai son pas une bonne idée de désactiver l'expiration du mot de passe car il peut conduire à des menaces possibles à la confidentialité, l'intégrité et la disponibilité des données.

Cependant, si vous le souhaitez.

Si vous avez l'utilisation d'un accès approprié suivant SQL

SELECT nom d'utilisateur, account_status DE 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 Pedro Carriço répondre https://stackoverflow.com/a/6777079/2432468

Questions connexes