Ana içeriğe geç

Süper kullanıcı rolü olmadan bir hesabı kullanma

superuser rolüne (veya Amazon Aurora ya da Amazon RDS ile çalışırken rds_superuser rolüne) sahip bir hesap kullanmıyorsanız Veri Tanımlama Dili (DDL) olaylarını yakalamak için birkaç nesne oluşturmanız gerekir. Bu nesneleri seçilen hesapta oluşturun ve ardından ana kullanıcı hesabında bir tetikleyici oluşturun.

Bilgi notuPostgreSQL için Google Cloud SQL ile superuser rolüne sahip bir hesap kullanmak üzere Data Movement gateway 2024.11.14 veya sonraki sürümü gerekir.

Bunu yapmak için:

  1. Nesnelerin oluşturulmasını istediğiniz bir şema seçin. Varsayılan şema geneldir. Şemanın var olduğundan ve ayrıcalıklı olmayan hesap tarafından erişilebilir olduğundan emin olun.
  2. Aşağıdaki komutu çalıştırarak attrep_ddl_audit tablosunu oluşturun:

    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. Aşağıdaki komutu çalıştırarak attrep_intercept_ddl fonksiyonunu oluşturun:

    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. Ayrıcalıklı olmayan bir hesapla oturum açtıysanız ayrıcalıklı olmayan hesaptan çıkın ve kendisine superuser rolü (veya Amazon Aurora ya da Amazon RDS ile çalışırken rds_superuser rolü) atanmış bir hesapla oturum açın.

    Bilgi notu

    attrep_intercept_ddl saklı prosedürü varsayılan şemada oluşturulmuyorsa PostgreSQL bağlayıcı ayarlarındaki Şemada DDL yapıtları oluştur alanında şema adını belirtmeniz gerekir.

    Çoğaltma yapılandırma parametreleriyle ilgili daha fazla bilgi edinmek için bkz. PostgreSQL Yardımı.

  5. Aşağıdaki komutu çalıştırarak attrep_intercept_ddl olay tetikleyicisini oluşturun:

    CREATE EVENT TRIGGER attrep_intercept_ddl ON ddl_command_end

    EXECUTE PROCEDURE <objects_schema>.attrep_intercept_ddl();

  6. Ayrıcalıklı olmayan hesaba aşağıdaki izinleri verin:

    • 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. Kullanıcıya SELECT izni verin:

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

  8. Kullanıcıya şema üzerinde kullanım izni verin:

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

Bu sayfa size yardımcı oldu mu?

Bu sayfa veya içeriği ile ilgili bir sorun; bir yazım hatası, eksik bir adım veya teknik bir hata bulursanız, bize bildirin, düzeltelim!