chore(db): document partition-maintenance privilege model in 02_grants.sql
Sync deployment-скрипта с прод-DB-состоянием после 23.05.2026 partition fix: ALTER TABLE OWNER → crm_migrator на 7 audit-таблицах (выравнивает дрейф; prod уже в этом состоянии) + GRANT crm_migrator TO crm_supplier_worker WITH INHERIT TRUE — даёт maintenance-роли права создавать/дропать партиции через MonthlyPartitionManager::DDL_CONNECTION = pgsql_supplier (commitfd660da4). Web-роль crm_app_user остаётся least-privilege — членства не получает. Идемпотентно: повторный запуск 02_grants.sql безопасен. Связано:fd660da4(код-фикс). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user