Ga naar hoofdinhoud

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.

U doet dit als volgt:

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

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

    • 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. Wijs de SELECT-machtiging toe aan de gebruiker:

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

  8. Gebruik van het schema toekennen aan de gebruiker:

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

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een typfout, een ontbrekende stap of een technische fout – laat het ons weten zodat we dit kunnen verbeteren!