2011-04-02 28 views
16

Después de recibir el mensaje Your password will be expired with in 7 days, cambié los días de caducidad de la contraseña del perfil default al UNLIMITED. Pero el estado de la cuenta de algunos usuarios aún permanece en EXPIRE(GRACE).cambiar el estado de la cuenta de usuario de Oracle de EXPIRE (GRACE) a OPEN

Cualquier forma de cambiar el estado de cuenta de usuario de Oracle de EXPIRE(GRACE) a OPEN sin restablecer la contraseña?

Respuesta

17

No, no puede cambiar el estado de una cuenta de EXPIRE (GRACE) a OPEN sin restablecer la contraseña.

El documentation dice:

Si causa contraseña de un usuario de base de datos para cumplir con CONTRASEÑA expirar, a continuación, el usuario (o el DBA) debe cambiar la contraseña antes de intentar iniciar sesión en la base de datos después de la vencimiento.

Sin embargo, puede cambiar el estado a ABRIR restableciendo la contraseña del usuario al mismo valor.

Dependiendo de la versión y la configuración, una de estas consultas es probable que obtener el hash de la contraseña:

select spare4 from sys.user$ where name='[user name]'; 
select password from dba_users where username = '[user name]'; 

los utilizan para restablecerla:

alter user [user name] identified by values '[result from above query]'; 
17

Compilación de la respuesta jonearles', http://kishantha.blogspot.com/2010/03/oracle-enterprise-manager-console.html y http://blog.flimatech.com/2011/07/17/changing-oracle-password-in-11g-using-alter-user-identified-by-values/ (Oracle 11g):

Para evitar que esto suceda en el futuro haga lo siguiente.

  • sesión en SQLPLUS como sysdba -> sqlplus "/ as sysdba"
  • Ejecutar ->ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED;

Para restablecer el estado de los usuarios, ejecutar la consulta:

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; 

y ejecutar algunos o todos los conjuntos de resultados.

+0

Solo tuve que hacer primero el linesize más grande para que pueda copiar fácilmente el resultado: establecer linesize 200; – AmanicA

+0

¡Esto me ayudó! ¡Gracias! –

2

En caso de que conoce la contraseña de ese usuario, o que le gustaría que adivinar que, haga lo siguiente:

  • connect user/password

Si este comando se conecta successufully, verá el mensaje "conectado", de lo contrario, vería un mensaje de error. Si es entonces el registro exitoso, eso significa que conoce la contraseña. En ese caso, simplemente:

  • alter user NAME_OF_THE_USER identified by OLD_PASSWORD;

y esto se restablecerá la contraseña de la misma contraseña que antes y también restablecer el account_status para ese usuario.

4
set long 9999999 
set lin 400 
select DBMS_METADATA.GET_DDL('USER','YOUR_USER_NAME') from dual; 

Esto sería algo como esto:

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> 

sólo tiene que utilizar la primera pieza de eso con el usuario alter lugar:

ALTER USER "WILIAM" IDENTIFIED BY VALUES 'S:6680C1468F5F3B36B726CE7620F 
FD9657F0E0E49AE56AAACE847BA368CEB;120F24A4C2554B4F'; 

Esto pondrá la cuenta atrás en el OPEN estado sin cambiar la contraseña (siempre y cuando corte y pegue correctamente el valor hash de la salida de DBMS_METADATA.GET_DDL) y ni siquiera necesita saber cuál es la contraseña.

+0

¡Increíble! ¡Funcionó como la magia! – AlexSC

Cuestiones relacionadas