Vai al contenuto principale

Utilizzo di un account senza il ruolo di utente avanzato

Se non si utilizza un account con il ruolo di superuser (utente avanzato), o il ruolo rds_superuser quando si utilizza Amazon Aurora o Amazon RDS, è necessario creare diversi oggetti per acquisire gli eventi di Data Definition Language (DDL). Creare questi oggetti nell'account selezionato, quindi creare un trigger nell'account utente principale.

Nota informaticaL'utilizzo di un account con il ruolo di superuser con Google Cloud SQL per PostgreSQL richiede Data Movement gateway 2024.11.14 o versione successiva.

Per farlo:

  1. Scegliere uno schema in cui si desidera che vengano creati gli oggetti. Lo schema predefinito è pubblico. Assicurarsi che lo schema esista e sia accessibile dall'account non privilegiato.
  2. Creare la tabella attrep_ddl_audit eseguendo il seguente comando:

    create table <objects_schema>.attrep_ddl_audit
    (
    c_key    bigserial primary key,
    c_time   timestamp,    -- Informational
    c_user   varchar(64),  -- Informational: Current_user
    c_txn    varchar(16),  -- Informational: Current transaction
    c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
    c_oid    integer,      -- For future use - TG_OBJECTID
    c_name   varchar(64),  -- For future use - TG_OBJECTNAME
    c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now, holds the current_schema
    c_ddlqry  text         -- The DDL query associated with the current DDL event
    );
  3. Creare la funzione attrep_intercept_ddl eseguendo il seguente comando:

    CREATE OR REPLACE FUNCTION <objects_schema>.attrep_intercept_ddl()
      RETURNS event_trigger
    LANGUAGE plpgsql
      AS $$
      declare _qry text;
    BEGIN
      if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE') then
             SELECT current_query() into _qry;
             insert into <objects_schema>.attrep_ddl_audit
             values
             (
             default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
             );
             delete from <objects_schema>.attrep_ddl_audit;
    end if;
    END;
    $$;
    
  4. Se si è effettuato l'accesso con un account non privilegiato, uscire dall'account non privilegiato e accedere con un account a cui è stato assegnato il ruolo di superuser (o il ruolo rds_superuser quando si lavora con Amazon Aurora o Amazon RDS).

    Nota informatica

    Se la procedura archiviata attrep_intercept_ddl non viene creata nello schema predefinito, è necessario specificare il nome dello schema nel campo Crea artefatti DDL nello schema nelle impostazioni del connettore PostgreSQL.

    Per ulteriori informazioni sui parametri di configurazione della replica, vedere la Guida di PostgreSQL.

  5. Creare il trigger dell'evento attrep_intercept_ddl eseguendo il seguente comando:

    CREATE EVENT TRIGGER attrep_intercept_ddl ON ddl_command_end

    EXECUTE PROCEDURE <objects_schema>.attrep_intercept_ddl();

  6. Concedere le seguenti autorizzazioni all'account non privilegiato:

    • GRANT INSERT ON attrep_ddl_audit to <non-privileged-user>;
    • GRANT DELETE ON attrep_ddl_audit to <non-privileged-user>;
    • GRANT USAGE ON attrep_ddl_audit_c_key_seq TO <non-privileged-user>;

    • ALTER ROLE <non-privileged-user> WITH REPLICATION;

    • GRANT rds_replication to <non-privileged-user>;

  7. Concedere l'autorizzazione SELECT all'utente:

    GRANT SELECT ON ALL TABLES IN SCHEMA <SCHEMA _NAME> TO <non-privileged-user>;

  8. Concedere l'utilizzo dello schema all'utente:

    GRANT USAGE ON SCHEMA <SCHEMA_NAME> TO <non-privileged-user>;

Hai trovato utile questa pagina?

Se riscontri problemi con questa pagina o con il suo contenuto – un errore di battitura, un passaggio mancante o un errore tecnico – facci sapere come possiamo migliorare!