メイン コンテンツをスキップする

スーパーユーザー ロールを持たないアカウントの使用

スーパーユーザー ロール (Amazon Aurora または Amazon RDS を使用する場合は rds_superuser ロール) を持つアカウントを使用していない場合は、データ定義言語 (DDL) イベントをキャプチャするためにいくつかのオブジェクトを作成する必要があります。選択したアカウントでこれらのオブジェクトを作成し、マスター ユーザー アカウントでトリガーを作成します。

情報メモGoogle Cloud SQL for PostgreSQL でスーパーユーザー ロールを持つアカウントを使用するには、Data Movement gateway 2024.11.14 以降が必要です。

これを実行するには、次の手順に従います。

  1. オブジェクトを作成するスキーマを選択します。既定のスキーマはパブリックです。スキーマが存在し、非特権アカウントからアクセスできることを確認します。
  2. 次のコマンドを実行して、テーブル attrep_ddl_audit を作成します。

    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. 次のコマンドを実行して関数 attrep_intercept_ddl を作成します。

    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. 権限のないアカウントでログインしている場合は、権限のないアカウントからログアウトし、スーパーユーザー ロール (Amazon Aurora または Amazon RDS を使用している場合は rds_superuser ロール) が割り当てられているアカウントでログインします。

    情報メモ

    attrepintercept_ddl ストアド プロシージャが既定のスキーマに作成されない場合は、PostgreSQL コネクタ設定の [スキーマに DDL アーティファクトを作成] 項目でスキーマ名を指定する必要があります。

    レプリケーション構成パラメーターの詳細については、PostgreSQL ヘルプを参照してください。

  5. 次のコマンドを実行して、イベント トリガー attrep_intercept_ddl を作成します。

    CREATE EVENT TRIGGER attrep_intercept_ddl ON ddl_command_end

    EXECUTE PROCEDURE <objects_schema>.attrep_intercept_ddl();

  6. 権限のないアカウントに次の権限を付与します。

    • 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. ユーザーに SELECT 権限を付与します。

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

  8. ユーザーにスキーマの使用権限を付与します。

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

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。