2009-07-08 19 views
145

Estoy usando Oracle para el desarrollo. La contraseña para una cuenta de rutina de carga que siempre uso para reconstruir mi base de datos ha expirado.¿Cómo desactivo la caducidad de la contraseña de Oracle?

¿Cómo desactivo la caducidad de contraseñas para este usuario (y todos los demás usuarios) permanentemente?

Estoy usando Oracle 11g, que tiene contraseñas caducan de forma predeterminada.

+0

creo que podría ser mejor pedir esto en serverfault.com. No voy a forzarlo porque dijiste que lo estás usando para el desarrollo, y creo que todavía hay una posibilidad de que alguien aquí lo sepa y/o los demás puedan beneficiarse de esta información. –

+0

Creo que haré justamente eso. Estaba debatiendo para qué sitio era más apropiado, ya que es una cuestión de base de datos básica y no tanto una cuestión de DBA. –

+0

No estoy seguro de cuál es la política de engaño para las preguntas entre sitios, pero aquí está el enlace: http://serverfault.com/questions/37622/how-do-i-turn-off-oracle-password-expiration –

Respuesta

253

para alterar la política de caducidad de contraseña para un perfil de usuario determinado en Oracle primera Ver ficha wich el usuario está en uso:

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

A continuación, puede cambiar el límite para que no caduque nunca usando:

alter profile <profile_name> limit password_life_time UNLIMITED; 

Si desea comprobar previamente el límite que puede usar:

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

Esto alteró el perfil. Sin embargo, tengo usuarios cuyas contraseñas caducan porque el perfil predeterminado lo tenía como tal cuando se crearon. ¿Cómo modifico estas cuentas de usuario para que la contraseña no caduque? –

+9

'seleccione nombre de usuario, fecha de vencimiento, cuenta_estado de dba_users;' para ver el estado de la cuenta. para las cuentas vencidas, es posible que deba restablecer la contraseña una vez por última vez. –

+4

alterar el desbloqueo de la cuenta del usuario aaa; –

16

Creo que el comportamiento de caducidad de la contraseña, de forma predeterminada, es que nunca caducará. Sin embargo, puede configurar un perfil para su conjunto de usuarios dev y establecer el PASSWORD_LIFE_TIME. Vea el orafaq para más detalles. Puede ver here para ver un ejemplo de la perspectiva y el uso de una persona.

+7

Creo que en una nueva instalación 11g (en lugar de una actualización) con la seguridad mejorada recomendada, las contraseñas caducarán de forma predeterminada después de 30 días. –

+1

En 11g, son 180 días: http://docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/task_WorkingWithOracle11gSecurityFeatures-3e78fd.html –

77

Fo r desarrollo puede desactivar la política de contraseñas si no se configuró ningún otro perfil (es decir desactivar la caducidad de la contraseña por defecto):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

Luego, restablezca la contraseña y desbloquee la cuenta de usuario. Nunca debe expirar nuevo:

alter user user_name identified by new_password account unlock; 
+0

¡Gracias, eso funciona muy bien! – grep

32

A medida que el estado de otras respuestas, cambiando el perfil del usuario (por ejemplo, el perfil de 'default') apropiada dará lugar a las contraseñas, que una vez establecido, no expirará.

Sin embargo, como señala un comentador, es posible que las contraseñas establecidas en los valores anteriores del perfil ya hayan expirado y (si después del período de gracia especificado del perfil) la cuenta se bloqueó.

La solución para contraseñas caducadas con cuentas bloqueadas (según lo dispuesto en un comentario de respuesta) es utilizar una versión del comando ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK; 

Sin embargo, el comando de desbloqueo sólo funciona para las cuentas que la cuenta la realmente bloqueado, pero no para aquellas cuentas que se encuentran en el período de gracia, donde la contraseña ha expirado pero la cuenta aún no está bloqueada. Por estas cuentas de la contraseña debe ser reiniciado con otra versión del comando ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password; 

A continuación se muestra un SQL * Plus script que un usuario privilegiado (por ejemplo, usuario 'SYS') se puede utilizar para restablecer la contraseña de un usuario poco al valor actual hash almacenado en la base de datos.

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

Muy bien, gracias – dreyln

+1

Gracias por la ayuda. Es muy difícil encontrar una respuesta relevante. Cada otra respuesta se refiere a PASSWORD_LIFE_TIME solamente. – sabertiger

+0

La columna SYS.USER $ .PASSWORD solo contendrá el hash de la versión de la contraseña que no distingue entre mayúsculas y minúsculas (¿mayúscula?). En Oracle 11, a menos que configure el parámetro del sistema SEC_CASE_SENSITIVE_LOGON = FALSE, habrá un hash mucho más largo de la contraseña sensible a las mayúsculas y minúsculas en la columna SYS.USER $ .SPARE4. – Morbo

1

voy a sugerir que no es una buena idea para apagar la expiración de la contraseña, ya que puede dar lugar a posibles amenazas a la confidencialidad, integridad y disponibilidad de los datos.

Sin embargo, si así lo desea.

Si usted tiene acceso adecuado uso de SQL siguiente

nombre de usuario SELECT, account_status DE dba_users;

Esto debería darle un resultado como este.

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 

Ahora puede utilizar Pedro Carriço responder https://stackoverflow.com/a/6777079/2432468

Cuestiones relacionadas