Gå till huvudinnehåll

Använda ett konto utan superuser-rollen

Om du inte använder ett konto med superuser-rollen (eller rds_superuser-rollen när du arbetar med Amazon Aurora eller Amazon RDS) måste du skapa flera objekt för att fånga DDL-händelser (Data Definition Language). Skapa dessa objekt i det valda kontot och skapa sedan en trigger i huvudanvändarkontot.

Anteckning om informationAtt använda ett konto med superuser-rollen med Google Cloud SQL för PostgreSQL kräver Data Movement gateway 2024.11.14 eller senare.

För att göra detta:

  1. Välj ett schema där du vill att objekten ska skapas. Standardschemat är offentligt. Kontrollera att schemat finns och att det är tillgängligt för det icke-behöriga kontot.
  2. Skapa tabellen attrep_ddl_audit genom att köra följande kommando:

    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. Skapa funktionen attrep_intercept_ddl genom att köra följande kommando:

    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. Om du är inloggad med ett icke-behörigt konto loggar du ut från det icke-behöriga kontot och loggar in med ett konto som har tilldelats superuser-rollen (eller rds_superuser-rollen när du arbetar med Amazon Aurora eller Amazon RDS).

    Anteckning om information

    Om den lagrade processen attrep_intercept_ddl inte skapas i standardschemat måste du ange schemanamnet i fältet Skapa DDL-artefakter i schema i PostgreSQL-kopplingens inställningar.

    Mer information om parametrarna för replikeringsinställning finns i hjälpavsnittet för PostgreSQL.

  5. Skapa händelsetriggern attrep_intercept_ddl genom att följande kommando:

    CREATE EVENT TRIGGER attrep_intercept_ddl ON ddl_command_end

    EXECUTE PROCEDURE <objects_schema>.attrep_intercept_ddl();

  6. Ge följande behörigheter till det icke-behöriga kontot:

    • 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. Ge SELECT-behörighet till användaren:

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

  8. Ge användaren behörighet att använda schemat:

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

Var den här sidan till hjälp för dig?

Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!