Рассмотрим сценарий, в котором роль analyst должна читать OLAP-данные из S3-хранилища, роль etl_user должна записывать OLAP-данные в это хранилище, а другие роли не должны иметь доступа к этому хранилищу.
Чтобы настроить этот сценарий:
Пример 23.3.
SELECT duckdb.create_simple_secret(
type := 'S3',
key_id := 'AKIAIOSFODNN7EXAMPLE',
secret := 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
endpoint := 'storage.example.ru',
region := 'us-east-1'
);Инициализируйте каталог метаданных.
Пример 23.4.
SELECT metastore.init(true);
Пример 23.5.
SELECT metastore.add_storage('data_storage', 's3://data-bucket/', 's3://data-bucket/tmp/');Создайте аналитическую таблицу, затем создайте представление Postgres Pro для этой таблицы.
Пример 23.6.
SELECT metastore.add_table('sales_data', 'data_storage', 'public.sales');
SELECT metastore.create_view('sales_data');Предоставьте права на аналитическую таблицу:
Предоставьте право 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;
Так как роли analyst предоставлено право SELECT на представление Postgres Pro, команда выполняется.
Простой секрет найден в сопоставлении пользователей для роли PUBLIC.
Устанавливается подключение к S3-хранилищу.
Если роль etl_user выполняет следующую команду:
SELECT metastore.copy_table('sales_data', 'SELECT * FROM staging.sales');Так как роли etl_user предоставлено право INSERT на аналитическую таблицу, команда выполняется.
Простой секрет найден в сопоставлении пользователей для роли PUBLIC.
Устанавливается подключение к S3-хранилищу.
Если роль random_user пытается выполнить следующую команду:
SELECT * FROM sales_data;
Так как роли random_user не предоставлено никаких прав на представление Postgres Pro, команда отклоняется с ошибкой доступа.