# Een account gebruiken zonder de rol van superuser

Als u geen account met de superuser rol gebruikt (of de rds\_superuser rol als u met Amazon Aurora of Amazon RDS werkt), moet u verschillende objecten maken om Data Definition Language (DDL) gebeurtenissen vast te leggen. Maak deze objecten aan in het geselecteerde account en maak vervolgens een trigger aan in het hoofdgebruikersaccount.

InformatieVoor het gebruik van een account met de superuser rol met Google Cloud SQL voor PostgreSQL is Data Movement gateway 2024.11.14 of hoger vereist.

Voor de volgende actie:

1. Kies een schema waarin u de objecten wilt aanmaken. Het standaardschema is openbaar. Zorg ervoor dat het schema bestaat en toegankelijk is voor het account zonder rechten.

2. Maak de tabel attrep\_ddl\_audit door de volgende opdracht uit te voeren:

   ```
   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. Maak de functie attrep\_intercept\_ddl door de volgende opdracht uit te voeren:

   ```
   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. Als u bent ingelogd met een account zonder rechten, log dan uit bij het account zonder rechten en log in met een account waaraan de rol van superuser is toegewezen (of de rol rds\_superuser als u met Amazon Aurora of Amazon RDS werkt).

   Informatie

   Als de attrep\_intercept\_ddl opgeslagen procedure niet in het standaardschema wordt gemaakt, moet u de schemanaam opgeven in het veld DDL-artefacten in schema maken in de instellingen van de PostgreSQL-connector.

   Voor meer informatie over de configuratieparameters voor replicatie, raadpleegt u de PostgreSQL Help.

5. Maak de gebeurtenistrigger attrep\_intercept\_ddl door de volgende opdracht uit te voeren:

   CREATE EVENT TRIGGER attrep\_intercept\_ddl ON ddl\_command\_end

   EXECUTE PROCEDURE &lt;objects\_schema&gt;.attrep\_intercept\_ddl();

6. Wijs de volgende machtigingen toe aan het account zonder rechten:

   * 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;;

   * Wanneer u werkt met PostgreSQL on-premises, Microsoft Azure Database for PostgreSQL, Google Cloud SQL for PostgreSQL of Google Cloud AlloyDB for PostgreSQL, moet u de volgende machtigingen toewijzen:

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

   * Wanneer u met Amazon RDS for PostgreSQL of Amazon Aurora werkt, moet u de volgende machtiging toewijzen:

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

7. Wijs de SELECT-machtiging toe aan de gebruiker:

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

8. Gebruik van het schema toekennen aan de gebruiker:

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