¿Cómo desactivo la caducidad de la contraseña de Oracle?

177

Estoy usando Oracle para el desarrollo. La contraseña para una cuenta bootstrap que siempre uso para reconstruir mi base de datos ha caducado.

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

Estoy usando Oracle 11g, que tiene las contraseñas caducan por defecto.

Josh Kodroff
fuente
Creo que es mejor que preguntes 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 conozca y / u otros aquí puedan beneficiarse de esta información.
Bill the Lizard
Creo que haré exactamente eso. Estaba debatiendo para qué sitio era más apropiado, ya que es una pregunta básica de la base de datos y no tanto una cuestión de DBA.
Josh Kodroff
No estoy seguro de cuál es la política de engaño para preguntas entre sitios, pero aquí está el enlace: serverfault.com/questions/37622/…
Josh Kodroff

Respuestas:

313

Para alterar la política de caducidad de contraseña para un determinado perfil de usuario en Oracle, primero verifique qué perfil está utilizando el usuario:

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

Luego puede cambiar el límite para que nunca caduque usando:

alter profile <profile_name> limit password_life_time UNLIMITED;

Si desea verificar previamente el límite, puede usar:

select resource_name,limit from dba_profiles where profile='<profile_name>';
Pedro Carriço
fuente
55
Esto alteró el perfil. Sin embargo, tengo usuarios cuyas contraseñas están expiradas 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?
Jay Imerman
14
select username,expiry_date,account_status from dba_users; para ver el estado de la cuenta. para aquellos que vencen, es posible que deba restablecer la contraseña una vez por última vez.
Will Wu
66
alterar el desbloqueo de la cuenta aaa del usuario;
Kalpesh Soni
1
Para completar, si es necesario cambiar un usuario a otro perfil: ALTER USER Bob PROFILE MyNonExpiringProfile;.
no hay filas seleccionadas en la consulta "seleccione el perfil de DBA_USERS donde username = '<username>';"
gaurav
90

Para el desarrollo , puede deshabilitar la política de contraseñas si no se configuró ningún otro perfil (es decir, deshabilitar la caducidad de la contraseña en el predeterminado):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;
Shimon
fuente
40

Como dicen las otras respuestas, cambiar el perfil del usuario (p. Ej., El perfil 'PREDETERMINADO') conducirá a contraseñas que, una vez configuradas, nunca caducarán.

Sin embargo, como señala un comentarista, las contraseñas establecidas bajo los valores anteriores del perfil ya pueden haber caducado y (si después del período de gracia especificado del perfil) la cuenta se ha bloqueado.

La solución para contraseñas caducadas con cuentas bloqueadas (como se proporciona en un comentario de respuesta) es usar una versión del comando ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK;

Sin embargo, el comando de desbloqueo solo funciona para cuentas donde la cuenta está realmente bloqueada, pero no para aquellas cuentas que están en el período de gracia, es decir, donde la contraseña ha caducado pero la cuenta aún no está bloqueada. Para estas cuentas, la contraseña debe restablecerse con otra versión del comando ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

A continuación se muestra una pequeña secuencia de comandos SQL * Plus que un usuario privilegiado (por ejemplo, el usuario 'SYS') puede usar para restablecer la contraseña de un usuario al valor hash actual existente almacenado en la base de datos.

EDITAR: Las versiones anteriores de Oracle almacenan la contraseña o el hash de contraseña en la columna de la palabra clave, las versiones más recientes de Oracle almacenan el hash de contraseña en la columna spare4. La secuencia de comandos a continuación cambió para recopilar las columnas pword y spare4, pero para usar la columna spare4 para restablecer la cuenta del usuario; modificar según sea necesario.

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';
Kieron Hardy
fuente
2
Gracias por la ayuda. Es muy difícil encontrar una respuesta relevante. Cualquier otra respuesta se refiere solo a PASSWORD_LIFE_TIME.
sabertiger
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. En Oracle 11, a menos que establezca el parámetro del sistema SEC_CASE_SENSITIVE_LOGON = FALSE, habrá un hash mucho más largo de la contraseña sensible a mayúsculas y minúsculas en la columna SYS.USER $ .SPARE4.
Morbo
16

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

akf
fuente
77
Creo que en una nueva instalación de 11g (en lugar de una actualización) con la seguridad mejorada recomendada, las contraseñas caducarán por defecto después de 30 días.
Gary Myers
1
En 11g son 180 días: docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/…
Nicolas Mommaerts
0

Sugeriré que no es una buena idea desactivar la caducidad de la contraseña, ya que puede dar lugar a posibles amenazas a la confidencialidad, integridad y disponibilidad de datos.

Sin embargo si así lo quieres.

Si tiene acceso adecuado, use el siguiente SQL

SELECCIONAR nombre de usuario, account_status FROM dba_users;

Esto debería darte 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 usar la respuesta de Pedro Carriço https://stackoverflow.com/a/6777079/2432468

Pawan Kumar
fuente
Si bien estoy de acuerdo en que es imprudente deshabilitar la caducidad de la contraseña en entornos de Producción, es posible que deseemos desactivarla en Desarrollo o Pruebas.
APC