diff --git a/db/02_grants.sql b/db/02_grants.sql index 2519946a..a963e70e 100644 --- a/db/02_grants.sql +++ b/db/02_grants.sql @@ -140,3 +140,34 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE ON TABLE supplier_csv_reconcile_log TO crm_supplier_worker; GRANT USAGE, SELECT ON SEQUENCE supplier_csv_reconcile_log_id_seq TO crm_supplier_worker; + +-- ============================================================================= +-- 23.05.2026 (post hole #2): partition-maintenance privilege model +-- ============================================================================= +-- `partitions:create-months` / `partitions:drop-expired` теперь идут через +-- `pgsql_supplier` connection (MonthlyPartitionManager::DDL_CONNECTION). Чтобы +-- `crm_supplier_worker` мог CREATE/DROP партиции партиционированных родителей, +-- нужны два условия: +-- 1. Единый владелец всех 9 партиционированных родителей — `crm_migrator`. +-- По умолчанию `schema.sql` создаёт audit-таблицы под `postgres` (load +-- выполняется суперпользователем при `migrate:fresh`); явный ALTER OWNER +-- ниже выравнивает прод (где это уже сделано вживую 23.05.2026) и +-- гарантирует, что fresh-deploy не разойдётся. +-- 2. `crm_supplier_worker` — член `crm_migrator` (INHERIT TRUE), чтобы +-- ownership-операции (CREATE TABLE ... PARTITION OF, DROP TABLE) проходили +-- проверку владельца. Web-роль `crm_app_user` остаётся least-privilege — +-- она НЕ получает crm_migrator-членство и НЕ может делать partition DDL. +-- +-- Идемпотентно — повторный запуск 02_grants.sql после первого применения +-- безопасен. +-- ============================================================================= + +ALTER TABLE auth_log OWNER TO crm_migrator; +ALTER TABLE activity_log OWNER TO crm_migrator; +ALTER TABLE tenant_operations_log OWNER TO crm_migrator; +ALTER TABLE webhook_log OWNER TO crm_migrator; +ALTER TABLE balance_transactions OWNER TO crm_migrator; +ALTER TABLE pd_processing_log OWNER TO crm_migrator; +ALTER TABLE saas_admin_audit_log OWNER TO crm_migrator; + +GRANT crm_migrator TO crm_supplier_worker WITH INHERIT TRUE;