# Utilisation d'un compte sans rôle superuser

Si vous n'utilisez pas de compte ayant le rôle superuser (ou le rôle rds\_superuser lorsque vous travaillez avec Amazon Aurora ou Amazon RDS), vous devez créer plusieurs objets pour capturer les événements DDL (Data Definition Language). Créez ces objets dans le compte sélectionné, puis créez un déclencheur dans le compte utilisateur principal.

Note InformationsL'utilisation d'un compte avec le rôle superuser avec Google Cloud SQL for PostgreSQL nécessite Passerelle de déplacement des données 2024.11.14 ou une version ultérieure.

Pour effectuer cette action :

1. Sélectionnez un schéma dans lequel vous souhaitez que les objets soient créés. Le schéma par défaut est public. Assurez-vous que le schéma existe et qu'il est accessible par le compte non privilégié.

2. Créez la table attrep\_ddl\_audit en exécutant la commande suivante :

   ```
   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. Créez la fonction attrep\_intercept\_ddl en exécutant la commande suivante :

   ```
   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 vous êtes connecté via un compte non privilégié, déconnectez-vous de ce compte et connectez-vous via un compte auquel a été affecté le rôle superuser (ou le rôle rds\_superuser si vous travaillez avec Amazon Aurora ou Amazon RDS).

   Note Informations

   Si la procédure stockée attrep\_intercept\_ddl n'est pas créée dans le schéma par défaut, vous devez spécifier le nom de schéma dans le champ Créer des artefacts de DDL dans le schéma des paramètres du connecteur PostgreSQL.

   Pour plus d'informations sur les paramètres de configuration de la réplication, voir l'Aide PostgreSQL.

5. Créez le déclencheur d'événement attrep\_intercept\_ddl en exécutant la commande suivante :

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

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

6. Accordez les autorisations suivantes au compte non privilégié :

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

   * Lorsque vous utilisez PostgreSQL on-premises, Microsoft Azure Database for PostgreSQL, Google Cloud SQL for PostgreSQL ou Google Cloud AlloyDB for PostgreSQL, accordez l'autorisation suivante :

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

   * Lorsque vous utilisez Amazon RDS for PostgreSQL ou Amazon Aurora, accordez l'autorisation suivante :

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

7. Accordez l'autorisation SELECT à l'utilisateur :

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

8. Accordez l'utilisation du schéma à l'utilisateur :

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