Saltar al contenido principal

Utilizar una cuenta sin el rol de superusuario

Si no utiliza una cuenta con el rol de superusuario (o el rol rds_superuser cuando trabaje con Amazon Aurora o Amazon RDS), deberá crear varios objetos para capturar los eventos del lenguaje de definición de datos (DDL). Cree estos objetos en la cuenta seleccionada y, a continuación, cree un activador en la cuenta del usuario maestro.

Nota informativaEl uso de una cuenta con el rol de superusuario con Google Cloud SQL para PostgreSQL requiere Data Movement gateway 2024.11.14 o posterior.

Para ello:

  1. Elija un esquema en el que desee que se creen los objetos. El esquema por defecto es público. Asegúrese de que el esquema existe y es accesible para la cuenta sin privilegios.
  2. Cree la tabla attrep_ddl_audit ejecutando el siguiente 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. Cree la función attrep_intercept_ddl ejecutando el siguiente 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. Si ha iniciado sesión con una cuenta sin privilegios, salga de la cuenta sin privilegios e inicie sesión con una cuenta que tenga asignado el rol de superusuario (o el rol rds_superuser cuando trabaje con Amazon Aurora o Amazon RDS).

    Nota informativa

    Si el procedimiento almacenado attrep_intercept_ddl no se está creando en el esquema predeterminado, deberá especificar el nombre del esquema en el campo Crear artefactos DDL en esquema de la configuración del conector PostgreSQL.

    Para más información sobre los parámetros de configuración de la replicación, consulte la Ayuda de PostgreSQL.

  5. Cree el activador de eventos attrep_intercept_ddl ejecutando el siguiente comando:

    CREATE EVENT TRIGGER attrep_intercept_ddl ON ddl_command_end

    EXECUTE PROCEDURE <objects_schema>.attrep_intercept_ddl();

  6. Conceda los siguientes permisos a la cuenta sin privilegios:

    • 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. Conceda el permiso SELECT al usuario:

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

  8. Conceda uso en el esquema al usuario:

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

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.