Come posso evitare che l'account utente principale della mia istanza database Amazon RDS per Oracle venga bloccato?

10 minuti di lettura
0

Voglio evitare che l'account utente principale della mia istanza database del Servizio di database relazionale Amazon (Amazon RDS) per Oracle venga bloccato.

Risoluzione

L'account utente principale in Amazon RDS è fondamentale per il monitoraggio, la gestione e l'esecuzione di attività amministrative relative al funzionamento dell'istanza database. Questo account è il primo account di database e include i ruoli e i privilegi amministrativi necessari per gestire e far funzionare il database. Per l'elenco completo dei privilegi e dei ruoli che l'utente principale ottiene per ogni motore del database, consulta la sezione Privilegi dell'account utente principale. Se l'account utente principale viene bloccato e non riesci ad accedervi, le tue capacità di amministrazione vengono interrotte e le operazioni aziendali critiche potrebbero risentirne. Puoi utilizzare la console Amazon RDS o un altro account di database per riottenere l'accesso al tuo account principale.

Identificare la causa principale

Uno dei motivi più comuni per il blocco dell'account utente principale è l'applicazione di impostazioni personalizzate del profilo all'account principale. Alcune di queste impostazioni includono quanto segue:

  • FAILED_LOGIN_ATTEMPTS: quando il numero di tentativi consecutivi non riusciti di accesso all'account principale supera il valore impostato per questo parametro, l'account viene bloccato.
  • PASSWORD_LIFE_TIME: quando la durata di utilizzo di una determinata password supera il valore impostato per questo parametro, non è possibile accedere all'account utilizzando tale password e l'account viene contrassegnato come scaduto. È necessario reimpostare la password per poter accedervi nuovamente. Se imposti un valore per PASSWORD_GRACE_TIME e la password non viene modificata entro il periodo di tolleranza, la password scade e le ulteriori connessioni vengono rifiutate.
  • INACTIVE_ACCOUNT_TIME: se l'account principale non accede al database per il numero di giorni consecutivi definito da questo parametro, l'account viene bloccato. Il valore minimo per questo parametro è di 15 giorni. Non esiste un valore massimo.

Per ulteriori informazioni sui parametri della password, consulta la documentazione Oracle per password_parameters.

Esegui la seguente query per controllare le impostazioni correnti del profilo dell'account utente principale e identificare il motivo per cui l'account è bloccato:

SELECT
    profile,
    resource_name,
    limit
FROM
    dba_profiles
WHERE
    resource_type = 'PASSWORD'
    AND   profile IN (
        SELECT
            profile
        FROM
            dba_users
        WHERE
            username = 'EXAMPLE-MASTER-USERNAME'
    );

Esempi:

Supponiamo di creare un profilo con l'impostazione FAILED_LOGIN_ATTEMTS che consente solo un inserimento errato della password.

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

È possibile applicare questo profilo all'utente principale eseguendo la seguente query:

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE sec_profile;
User altered.

Disconnettiti dal database ed esci da SQL*Plus:

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

Accedi all'account con la password errata:

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@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

Non sono consentiti ulteriori accessi perché FAILED_LOGIN_ATTEMTS è impostato su 1. Viene invece visualizzato il seguente messaggio di errore:

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@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.

Se nell'account principale è attivo il parametro PASSWORD_LIFE_TIME e la durata dell'utilizzo della stessa password supera il valore impostato per questo parametro, quando si tenta di accedere viene visualizzato il seguente messaggio di errore:

-bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@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

Sbloccare l'account principale

Puoi sbloccare l'account principale tramite uno dei seguenti modi:

Utilizzando la console Amazon RDS o l'AWS Command Line Interface (AWS CLI)

Reimpostando la password, è possibile sbloccare l'account e riaprirlo dopo la scadenza. Per ulteriori informazioni, consulta Come posso reimpostare la password dell'utente principale per la mia istanza database Amazon RDS per sbloccare l'utente principale?

Utilizzo di un account di database diverso

Se disponi già di un altro account di database (ad esempio, EXAMPLE-USER) con il privilegio ALTER USER, puoi utilizzare tale account per sbloccare l'account utente principale.

Identifica gli account con il privilegio ALTER USER tramite la seguente query:

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

Dovresti visualizzare un output simile al seguente:

GRANTEE                                                                     PRIVILEGE
--------------------------------------------------------------------------------------------------------------------------------
EXAMPLE-USER                                                                ALTER USER

Esegui questa query per identificare gli account per i quali viene concesso il privilegio tramite un ruolo:

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'

Dovresti visualizzare un output simile al seguente:

USERNAME
-----------------------------------------------------------------------------------
EXAMPLE-MASTER-USERNAME
RDSADMIN
USER1
EXAMPLE-USER

Nota: ignora RDSADMIN dall'output perché è un account interno di RDS.

Connettiti al database utilizzando l'account EXAMPLE-USER:

-bash-4.2$ sqlplus EXAMPLE-USER@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

Sblocca l'account utente principale eseguendo la seguente query:

SQL> ALTER USER EXAMPLE-MASTER-USERNAME ACCOUNT UNLOCK;
User altered.

Se la password è scaduta, reimposta la password eseguendo questa query:

SQL> ALTER USER EXAMPLE-MASTER-USERNAME IDENTIFIED BY EXAMPLE-MASTER-USER-NEW-PWD;
User altered.

Disconnettiti dal database EXAMPLE-USER ed esci da SQL*Plus:

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

Puoi accedere con successo con l'account utente principale. Viene visualizzato il seguente messaggio:

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@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 "EXAMPLE-MASTER-USERNAME"

Impossibile reimpostare la password per il tuo account principale: il tuo account principale potrebbe non essere in grado di reimpostare la password in determinate situazioni:

Esempio 1:

Se utilizzi la stessa password per l'account principale per più volte rispetto al numero definito dal parametro PASSWORD_REUSE_MAX, nella console Amazon RDS viene visualizzato il seguente evento:

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

Per vedere gli ultimi eventi per la tua istanza RDS, consulta Visualizzazione degli eventi Amazon RDS.

Per risolvere questo problema, reimposta la password per il tuo account principale su una nuova password che non è stata utilizzata in passato utilizzando la console Amazon RDS. Inoltre, se si dispone di un altro account di database con il privilegio ALTER USER, è possibile accedere a tale account e modificare la password. Se consentito, aggiorna il parametro PASSWORD_REUSE_MAX del profilo dell'account principale impostandolo su UNLIMITED in modo da poter riutilizzare la password un numero illimitato di volte.

Esempio 2:

Supponiamo che l'account principale abbia il parametro PASSWORD_VERIFY_FUNCTION impostato al fine di verificare criteri rigorosi per la password, come la lunghezza minima o l'obbligo di utilizzare il numero minimo di caratteri. È possibile che venga visualizzato il seguente errore quando si tenta di reimpostare la password e la nuova password non soddisfa le regole definite:

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

Per risolvere questo problema, assicurati che la nuova password soddisfi le regole definite nel parametro PASSOWRD_VERIFY_FUNCTION.

Impedire che l'account utente principale venga bloccato

Se i criteri di sicurezza dell'organizzazione lo consentono, evita di impostare profili personalizzati per il tuo account utente principale RDS e mantieni il profilo PREDEFINITO. Con il profilo PREDEFINITO, il tuo account utente principale viene fornito con un numero illimitato di tentativi di accesso non riusciti. Inoltre, la password dell'account utente principale non scade mai né viene disattivata per inattività. Tuttavia, è consigliabile reimpostare periodicamente la password utilizzando la console Amazon RDS.

È possibile visualizzare i limiti del profilo PREDEFINITO tramite la seguente query:

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'
   );

Dovresti visualizzare un output simile al seguente:

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.

Se il tuo account principale ha un profilo personalizzato, cambia l'account per utilizzare il profilo PREDEFINITO.

Controlla il profilo attuale del tuo account principale eseguendo la seguente query:

SELECT PROFILE FROM dba_users WHERE USERNAME = 'EXAMPLE-MASTER-USERNAME';

Cambia il profilo del tuo account principale in PREDEFINITO tramite la seguente query:

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE default;
User altered.

Nota: se i parametri della password del profilo PREDEFINITO sono stati modificati, ripristina le impostazioni di fabbrica del profilo PREDEFINITO per i parametri che potrebbero influire sull'accesso. Per farlo, usa il seguente comando:

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

Se la tua organizzazione utilizza criteri che richiedono la reimpostazione della password dell'account principale con impostazioni con restrizioni, assicurati di seguire le seguenti best practice:

  • Reimposta periodicamente la password utilizzando la console Amazon RDS prima che scada per via dell'impostazione PASSWORD_LIFE_TIME.
  • Se è impostato il parametro PASSWORD_VERIFY_FUNCTION con requisiti rigorosi per la verifica della password, rispetta questi requisiti quando imposti la nuova password.
  • Utilizza il tuo account utente principale in base all'impostazione INACTIVE_ACCOUNT_TIME in modo che l'account rimanga attivo.

Tieni traccia dei tentativi di accesso non riusciti

Puoi tenere traccia dei tentativi di accesso non validi al tuo account principale utilizzando la funzione di controllo in Oracle. Puoi farlo modificando il parametro di inizializzazione Oracle audit_trail in db per l'istanza RDS per Oracle. È possibile modificare questo parametro nel gruppo di parametri personalizzati dell'istanza database.

Se l'istanza RDS for Oracle utilizza un gruppo di parametri predefinito, non è possibile modificare i valori dei parametri. È necessario creare un nuovo gruppo di parametri personalizzato, impostare il valore del parametro e allegare il gruppo di parametri appena creato all'istanza. Riavvia quindi l'istanza per associarvi il nuovo gruppo di parametri. Per ulteriori informazioni, consulta la sezione Come posso modificare i valori di un gruppo parametri del database di Amazon RDS?

È necessario riavviare l'istanza RDS dopo aver modificato il parametro nel gruppo di parametri personalizzato. Questo perché il parametro audit_trail è statico ed è necessario il riavvio del database RDS per Oracle per riattivarlo. Per ulteriori informazioni, consulta la sezione Riavvio di un'istanza database.

Dopo che lo stato dell'istanza RDS diventa disponibile, accedi al database utilizzando l'account principale o qualsiasi account con il privilegio di controllo. Se non hai già configurato il controllo dei tentativi non riusciti, esegui il seguente comando per attivare il controllo dei tentativi di accesso non riusciti:

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

Quindi, esegui la seguente query per tenere traccia dei tentativi di accesso non riusciti o falliti dal tuo account principale.

Nota: puoi tenere traccia di questi dati per qualsiasi account di database rimuovendo EXAMPLE-USER dalla clausola WHERE.

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 = 'EXAMPLE-USER';

Documentazione Oracle per CREATE PROFILE


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa