Accéder au contenu principal

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 Data Movement gateway 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 <objects_schema>.attrep_intercept_ddl();

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

    • 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. Accordez l'autorisation SELECT à l'utilisateur :

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

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

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

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !