# 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 &lt;objects\_schema&gt;.attrep\_intercept\_ddl();

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

   * GRANT INSERT ON attrep\_ddl\_audit to &lt;non-privileged-user&gt;;

   * GRANT DELETE ON attrep\_ddl\_audit to &lt;non-privileged-user&gt;;

   * GRANT USAGE ON attrep\_ddl\_audit\_c\_key\_seq TO &lt;non-privileged-user&gt;;

   * Cuando trabaje con PostgreSQL on-premises, Microsoft Azure Database para PostgreSQL, Google Cloud SQL para PostgreSQL o Google Cloud AlloyDB para PostgreSQL, conceda el siguiente permiso:

     ALTER ROLE &lt;non-privileged-user&gt; WITH REPLICATION;

   * Cuando trabaje con Amazon RDS para PostgreSQL o Amazon Aurora, conceda el siguiente permiso:

     GRANT rds\_replication to &lt;non-privileged-user&gt;;

7. Conceda el permiso SELECT al usuario:

   GRANT SELECT ON ALL TABLES IN SCHEMA &lt;SCHEMA \_NAME&gt; TO &lt;non-privileged-user&gt;;

8. Conceda uso en el esquema al usuario:

   GRANT USAGE ON SCHEMA &lt;SCHEMA\_NAME&gt; TO &lt;non-privileged-user&gt;;