¿Cómo puedo evitar que la cuenta de usuario principal de la instancia de base de datos de Amazon RDS for Oracle se bloquee?

Última actualización: 16/11/2021

Me gustaría evitar el bloqueo de la cuenta de usuario principal de la instancia de base de datos de Amazon Relational Database Services (Amazon RDS) for Oracle.

Resolución

La cuenta de usuario principal en Amazon RDS es crucial para monitorear, administrar y realizar tareas administrativas a fin de utilizar la instancia de base de datos. Esta es la primera cuenta de base de datos e incluye los roles y privilegios administrativos necesarios para mantener y utilizar la base de datos. A fin de obtener la lista completa de privilegios y roles que el usuario principal recibe para cada motor de base de datos, consulte Privilegios de cuentas de usuario maestro. Si se bloquea la cuenta de usuario principal y no puede iniciar sesión, se interrumpirán sus capacidades administrativas y sus operaciones empresariales críticas podrían verse afectadas. Puede usar la consola de Amazon RDS o una cuenta de base de datos diferente para recuperar el acceso a la cuenta principal.

Identifique la causa raíz

Una de las razones más comunes del bloqueo de la cuenta de usuario principal es la aplicación de ajustes personalizados de configuración del perfil a la cuenta principal. Algunos de estos ajustes de configuración incluyen los siguiente:

  • FAILED_LOGIN_ATTEMENTS: Cuando la cantidad de intentos fallidos consecutivos de inicio de sesión en la cuenta principal supera el valor establecido para este parámetro, se bloqueará la cuenta.
  • PASSWORD_LIFE_TIME: Cuando la duración del uso de una determinada contraseña supera el valor establecido para este parámetro, no podrá iniciar sesión en la cuenta con dicha contraseña y la cuenta se marcará como caducada. Deberá restablecer la contraseña para volver a iniciar sesión. Si establece un valor para PASSWORD_GRACE_TIME y la contraseña no se modifica dentro del periodo de gracia, esta caducará y se rechazarán las próximas conexiones.
  • INACTIVE_ACCOUNT_TIME: Si la cuenta principal no inicia sesión en la base de datos durante la cantidad de días consecutivos definida en este parámetro, se bloqueará la cuenta. El valor mínimo para este parámetro es de 15 días. No hay un valor máximo.

Para obtener más información sobre los parámetros de contraseñas, consulte la documentación de Oracle para password_parameters.

Ejecute la siguiente consulta para verificar cuál es la configuración actual del perfil de la cuenta de usuario principal e identificar el motivo del bloqueo de la cuenta:

SELECT
    profile,
    resource_name,
    limit
FROM
    dba_profiles
WHERE
    resource_type = 'PASSWORD'
    AND   profile IN (
        SELECT
            profile
        FROM
            dba_users
        WHERE
            username = 'ADMIN'
    );

Nota: Asegúrese de sustituir ADMIN en la consulta por el nombre de usuario principal.

Ejemplos:

Imagine que crea un perfil con el parámetro de configuración FAILED_LOGIN_ATTEMENTS que permite ingresar solo una contraseña incorrecta.

SQL> CREATE PROFILE sec_profile LIMIT FAILED_LOGIN_ATTEMPTS 1;
Profile created.

Ejecute la siguiente consulta para poder aplicar este perfil al usuario principal:

SQL> ALTER USER admin PROFILE sec_profile;
User altered.

Desconéctese de la base de datos y abandone SQL*Plus:

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Inicie sesión en la cuenta con una contraseña incorrecta:

bash-4.2$ sqlplus admin/Secret123@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:33 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied

No se permiten más inicios de sesión porque el parámetro FAILED_LOGIN_ATTEMENTS está establecido en 1. En cambio, aparece el siguiente mensaje de error:

bash-4.2$ sqlplus admin/Secret123@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:44 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28000: The account is locked.

Cuando el parámetro PASSWORD_LIFE_TIME limita la cuenta principal y la duración del uso de la misma contraseña supera el valor establecido para este parámetro, aparecerá el siguiente mensaje de error al intentar iniciar sesión:

-bash-4.2$ sqlplus admin/Oracle123@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 20:14:03 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28001: the password has expired

Desbloquee la cuenta principal

Puede realizar cualquiera de las siguientes acciones para desbloquear la cuenta principal:

Usar la consola de Amazon RDS o AWS Command Line Interface (AWS CLI)

Al restablecer la contraseña, podrá desbloquear la cuenta y volver a abrirla luego de que caduque. Para obtener más información, consulte ¿Cómo restablezco la contraseña maestra de usuario para mi instancia de base de datos de Amazon RDS para desbloquear al usuario maestro?

Usar una cuenta de base de datos diferente

Si tiene otra cuenta de base de datos (por ejemplo, useradmin) con el privilegio ALTER USER, puede usar esa cuenta para desbloquear la cuenta de usuario principal.

Ejecute la siguiente consulta para identificar las cuentas con el privilegio ALTER USER:

SELECT
    grantee,
    privilege
FROM
    dba_sys_privs
WHERE
    privilege = 'ALTER USER'
    AND grantee IN (
        SELECT
            username
        FROM
            dba_users
        WHERE
            oracle_maintained = 'N'
    );

El resultado es similar al siguiente:

GRANTEE                                                                     PRIVILEGE
--------------------------------------------------------------------------------------------------------------------------------
USERADMIN                                                                  ALTER USER

Ejecute la siguiente consulta para identificar las cuentas en las que se otorga el privilegio con un rol:

SELECT DISTINCT
    dba_users.username
FROM
    dba_role_privs
    JOIN dba_users ON dba_role_privs.grantee = dba_users.username
                      AND granted_role IN (
        SELECT
            role
        FROM
            role_sys_privs
        WHERE
            privilege = 'ALTER USER'
    )
        AND dba_users.oracle_maintained = 'N'

El resultado es similar al siguiente:

USERNAME
-----------------------------------------------------------------------------------
ADMIN
RDSADMIN
USER1
USERADMIN

Nota: Ignore RDSADMIN en el resultado porque se trata de una cuenta interna de RDS.

Conéctese a la base de datos con la cuenta useradmin:

-bash-4.2$ sqlplus useradmin/User123@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:35:55 2021 Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:33:23 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Ejecute la siguiente consulta para desbloquear la cuenta de usuario principal:

SQL> ALTER USER admin ACCOUNT UNLOCK;
User altered.

Si la contraseña caducó, ejecute la siguiente consulta para restablecerla:

SQL> ALTER USER admin IDENTIFIED BY Oracle123;
User altered.

Desconéctese de useradmin en la base de datos y abandone SQL*Plus:

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Puede iniciar sesión de forma correcta mediante la cuenta de usuario principal. Recibirá el siguiente mensaje:

bash-4.2$ sqlplus admin/Oracle123@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:36:36 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:35:12+00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0
SQL> SHOW USER;
USER is "ADMIN"

No se puede restablecer la contraseña de su cuenta principal: Es posible que no pueda restablecer la contraseña de su cuenta principal en determinadas situaciones:

Ejemplo 1:

Si utiliza la misma contraseña para la cuenta principal más veces que la cantidad definida en el parámetro PASSWORD_REUSE_MAX, verá el siguiente evento en la consola de Amazon RDS:

Unable to reset your password. Error information: ORA-28007: the password cannot be reused ORA-06512: at line 1

En el caso de los eventos más recientes de la instancia de RDS, consulte Visualización de eventos de Amazon RDS.

Para resolver el problema, restablezca, desde la consola de Amazon RDS, la contraseña de la cuenta principal con una contraseña nueva que no usó anteriormente. Además, si tiene otra cuenta de base de datos con el privilegio ALTER USER, podrá iniciar sesión en esa cuenta y cambiar la contraseña. Si está permitido, actualice PASSWORD_REUSE_MAX del perfil de la cuenta principal a UNLIMITED (ILIMITADO) para poder reutilizar la contraseña la cantidad de veces que desee.

Ejemplo 2:

Imagine que la cuenta principal tiene una configuración del parámetro PASSWORD_VERIFY_FUNCTION que verifica políticas de contraseña estrictas, como la longitud mínima de la contraseña o el requisito de utilizar la cantidad mínima de caracteres. Es posible que aparezca el siguiente error al intentar restablecer la contraseña y si esta no cumple con las reglas definidas:

ORA-28003: password verification for the specified password failed.

Para resolver el problema, asegúrese de que se satisfagan las reglas definidas en PASSWORD_VERIFY_FUNCTION para la nueva contraseña.

Evite el bloqueo de la cuenta de usuario principal

Si las políticas de seguridad de la organización lo permiten, evite configurar perfiles personalizados para la cuenta de usuario principal de RDS y conserve el perfil DEFAULT (PREDETERMINADO). Con el perfil DEFAULT (PREDETERMINADO), la cuenta de usuario principal tiene ilimitados intentos de inicio de sesión fallidos. Además, la contraseña de la cuenta de usuario principal nunca caduca ni se desactiva por inactividad. Sin embargo, la práctica recomendada consiste en restablecer la contraseña con regularidad desde la consola de Amazon RDS.

Ejecute la siguiente consulta para poder ver los límites del perfil DEFAULT (PREDETERMINADO):

SELECT
   resource_name,
   limit
FROM
   dba_profiles
WHERE
   resource_type = 'PASSWORD'
   AND profile = 'DEFAULT'
   AND resource_name IN
   (
      'FAILED_LOGIN_ATTEMPTS',
      'PASSWORD_LIFE_TIME',
      'PASSWORD_VERIFY_FUNCTION',
      'INACTIVE_ACCOUNT_TIME',
      'PASSWORD_REUSE_TIME',
      'PASSWORD_REUSE_MAX'
   );

El resultado es similar al siguiente:

RESOURCE_NAME                    LIMIT
-------------------------------- --------------------------------------------------------------------------------------------------------------------------------
FAILED_LOGIN_ATTEMPTS            UNLIMITED
PASSWORD_LIFE_TIME               UNLIMITED
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED
PASSWORD_VERIFY_FUNCTION         NULL
INACTIVE_ACCOUNT_TIME            UNLIMITED

6 rows selected.

Si la cuenta principal tiene un perfil personalizado, cámbiela para usar el perfil DEFAULT (PREDETERMINADO).

Ejecute la siguiente consulta para verificar el perfil actual de la cuenta principal:

SELECT PROFILE FROM dba_users WHERE USERNAME = 'ADMIN';

Ejecute la siguiente consulta para cambiar el perfil actual de la cuenta principal a DEFAULT (PREDETERMINADO):

SQL> ALTER USER admin PROFILE default;
User altered.

Nota: Si modificó los parámetros de la contraseña del perfil DEFAULT (PREDETERMINADO), restablezca la configuración de fábrica de los parámetros que puedan afectar el inicio de sesión. Para ello, utilice el siguiente comando:

SQL> ALTER PROFILE default LIMIT
  failed_login_attempts UNLIMITED password_life_time UNLIMITED
  inactive_account_time UNLIMITED;
Profile altered.

Si la organización tiene políticas que requieren restablecer la contraseña de la cuenta principal con una configuración restringida, asegúrese de seguir las siguientes prácticas recomendadas:

  • Restablezca la contraseña con regularidad desde la consola de Amazon RDS antes de que caduque debido al parámetro de configuración PASSWORD_LIFE_TIME.
  • Si tiene un parámetro PASSWORD_VERIFY_FUNCTION con requisitos estrictos para verificar contraseñas, cúmplalos al configurar la nueva contraseña.
  • Utilice la cuenta de usuario principal según el parámetro de configuración INACTIVE_ACCOUNT_TIME para que la cuenta permanezca activada.

Realice un seguimiento de los intentos de inicio de sesión

Puede hacer un seguimiento de los intentos de inicio de sesión no válidos en la cuenta principal con la característica de auditoría de Oracle. Para ello, modifique el parámetro de inicialización de Oracle audit_trail a db para la instancia de RDS for Oracle. Puede modificar el parámetro en el grupo de parámetros personalizados de la instancia de base de datos.

Si la instancia de RDS for Oracle utiliza un grupo de parámetros predeterminados, no podrá cambiar los valores de los parámetros. Deberá crear un nuevo grupo de parámetros personalizados, establecer los valores de los parámetros y adjuntar el grupo de parámetros recién creado a la instancia. Luego, reinicie la instancia para asociar el nuevo grupo de parámetros a la instancia. Para obtener más información, consulte ¿Cómo modifico los valores de un grupo de parámetros de base de datos de Amazon RDS?

Deberá reiniciar la instancia de RDS luego de modificar el parámetro en el grupo de parámetros personalizados. Esto se debe a que el parámetro audit_trail es estático y requiere el reinicio de la base de datos de RDS para que surta efecto. Para obtener más información, consulte Reiniciar una instancia de base de datos.

Una vez que el estado de la instancia de RDS sea available (disponible), inicie sesión en la base de datos con la cuenta principal o cualquier cuenta con el privilegio de auditoría. Si todavía no configuró la auditoría de intentos fallidos, ejecute el siguiente comando para activar la auditoría de intentos de inicio de sesión fallidos:

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

A continuación, ejecute la siguiente consulta a fin de realizar un seguimiento de los intentos de inicio de sesión fallidos de la cuenta principal.

Nota: Si elimina el nombre de usuario de la cláusula WHERE, podrá realizar un seguimiento de los datos de cualquier cuenta de base de datos.

SELECT username,
       os_username,
       userhost,
       TO_CHAR(timestamp, 'MON-DD-YYYY HH24:MI:SS') what_time
FROM   dba_audit_trail
WHERE  returncode = 1017
       AND username = 'ADMIN';

El resultado puede ser similar al siguiente:

USERNAME                       OS_USERNAME                              USERHOST                                           WHAT_TIME
------------------------------ ---------------------------------------- -------------------------------------------------- ----------------------------------------
ADMIN                          oracle                                   ip-30-0-1-162.us-west-1.compute.internal           SEP-14-2021 15:48:08

Documentación de Oracle para CREAR UN PERFIL

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?