23.4. Сценарий: управление секретами #

Рассмотрим сценарий, в котором роль analyst должна читать OLAP-данные из S3-хранилища, роль etl_user должна записывать OLAP-данные в это хранилище, а другие роли не должны иметь доступа к этому хранилищу.

Чтобы настроить этот сценарий:

  1. Создайте простой секрет.

    Пример 23.3.

      SELECT duckdb.create_simple_secret(
          type     := 'S3',
          key_id   := 'AKIAIOSFODNN7EXAMPLE',
          secret   := 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
          endpoint := 'storage.example.ru',
          region   := 'us-east-1'
      );

  2. Инициализируйте каталог метаданных.

    Пример 23.4.

      SELECT metastore.init(true);

  3. Создайте S3-хранилище.

    Пример 23.5.

      SELECT metastore.add_storage('data_storage', 's3://data-bucket/', 's3://data-bucket/tmp/');

  4. Создайте аналитическую таблицу, затем создайте представление Postgres Pro для этой таблицы.

    Пример 23.6.

      SELECT metastore.add_table('sales_data', 'data_storage', 'public.sales');
    
      SELECT metastore.create_view('sales_data');

  5. Предоставьте права на аналитическую таблицу:

    • Предоставьте право SELECT роли analyst.

      Пример 23.7.

        GRANT SELECT ON sales_data TO analyst;

    • Предоставьте право INSERT роли, которая записывает OLAP-данные в аналитическую таблицу.

      Пример 23.8.

        SELECT metastore.mgrant('INSERT', 'TABLE', 'sales_data', 'etl_user');

Если роль analyst выполняет следующую команду:

  SELECT * FROM sales_data;
  1. Так как роли analyst предоставлено право SELECT на представление Postgres Pro, команда выполняется.

  2. Простой секрет найден в сопоставлении пользователей для роли PUBLIC.

  3. Устанавливается подключение к S3-хранилищу.

Если роль etl_user выполняет следующую команду:

  SELECT metastore.copy_table('sales_data', 'SELECT * FROM staging.sales');
  1. Так как роли etl_user предоставлено право INSERT на аналитическую таблицу, команда выполняется.

  2. Простой секрет найден в сопоставлении пользователей для роли PUBLIC.

  3. Устанавливается подключение к S3-хранилищу.

Если роль random_user пытается выполнить следующую команду:

  SELECT * FROM sales_data;

Так как роли random_user не предоставлено никаких прав на представление Postgres Pro, команда отклоняется с ошибкой доступа.