23.4. Сценарий: управление секретами #
Рассмотрим сценарий, в котором роль 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, команда отклоняется с ошибкой доступа.