fix(gendesign): FDW-роль не могла читать районы ЕКБ — витрина сделок МЕРЫ теряла район
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m5s
CI / backend-tests (pull_request) Successful in 17m46s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m5s
CI / backend-tests (pull_request) Successful in 17m46s
foreign table tradein.gendesign_ekb_districts_geom падала с «permission denied for
view ekb_districts_geom». Замер: has_table_privilege('tradein_fdw_reader',
'public.ekb_districts_geom','SELECT') = false, при том что все четыре соседних
объекта того же FDW-сервера (rosreestr_deals, mv_quarter_price_index,
v_tradein_cad_buildings, v_tradein_osm_poi_ekb) грант имеют.
Грант не «потерялся» — его не выдавали никогда: 74_dedupe_unified_views.sql
меняет тип объекта (DROP TABLE + CREATE OR REPLACE VIEW), то есть создаёт его
заново, а строки GRANT рядом не было. Тот же класс, что #2583.
Приёмка на проде после деплоя: тот же has_table_privilege обязан вернуть true,
а SELECT count(*) FROM gendesign_ekb_districts_geom — 8 вместо ошибки.
This commit is contained in:
parent
deddef80ad
commit
f2e6a59c68
2 changed files with 42 additions and 0 deletions
26
data/sql/194_grant_ekb_districts_fdw.sql
Normal file
26
data/sql/194_grant_ekb_districts_fdw.sql
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
-- 194_grant_ekb_districts_fdw.sql
|
||||||
|
-- Витрина сделок МЕРЫ не могла показать район: FDW-чтение падало с
|
||||||
|
-- permission denied for view ekb_districts_geom
|
||||||
|
-- (foreign table tradein.gendesign_ekb_districts_geom → сервер gendesign_remote,
|
||||||
|
-- роль tradein_fdw_reader).
|
||||||
|
--
|
||||||
|
-- Причина не в потере гранта, а в том, что его не выдавали НИКОГДА.
|
||||||
|
-- 74_dedupe_unified_views.sql делает `DROP TABLE ekb_districts_geom;
|
||||||
|
-- CREATE OR REPLACE VIEW ekb_districts_geom ...` — объект сменил тип с таблицы
|
||||||
|
-- на вьюху и был создан заново, а строки GRANT рядом не появилось. Все четыре
|
||||||
|
-- соседних объекта, которые tradein читает через тот же сервер
|
||||||
|
-- (rosreestr_deals, mv_quarter_price_index, v_tradein_cad_buildings,
|
||||||
|
-- v_tradein_osm_poi_ekb), грант имеют — этот остался единственным без него.
|
||||||
|
--
|
||||||
|
-- Тот же класс, что #2583 (188_regrant_quarter_price_index_fdw.sql): грант живёт
|
||||||
|
-- отдельно от объекта и молча исчезает при пересоздании. Поэтому GRANT дописан
|
||||||
|
-- ТАКЖЕ в конец 74-й — чтобы повторное применение той миграции его не теряло.
|
||||||
|
--
|
||||||
|
-- Признак починки: на tradein-стороне
|
||||||
|
-- SELECT count(*) FROM gendesign_ekb_districts_geom; -- было ERROR, стало 8
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
GRANT SELECT ON public.ekb_districts_geom TO tradein_fdw_reader;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
@ -254,3 +254,19 @@ SELECT 'nspd', log_id, run_id, ts, level, stage, cad_number, message
|
||||||
COMMENT ON VIEW v_scrape_log_unified IS
|
COMMENT ON VIEW v_scrape_log_unified IS
|
||||||
'Per-step log двух скраперов. entity_id = obj_id для kn / cad_number для nspd. '
|
'Per-step log двух скраперов. entity_id = obj_id для kn / cad_number для nspd. '
|
||||||
'objective scraper пока не пишет log — добавим если понадобится debug.';
|
'objective scraper пока не пишет log — добавим если понадобится debug.';
|
||||||
|
|
||||||
|
-- ── ГРАНТ ЖИВЁТ ЗДЕСЬ, А НЕ ОТДЕЛЬНО (29.08.2026) ──────────────────────────
|
||||||
|
-- Выше `DROP TABLE ekb_districts_geom` + `CREATE OR REPLACE VIEW` меняет тип
|
||||||
|
-- объекта, то есть создаёт его заново — а вместе с объектом исчезают и его
|
||||||
|
-- гранты. Из-за этого tradein-сторона (foreign table
|
||||||
|
-- gendesign_ekb_districts_geom, роль tradein_fdw_reader) читала вьюху с
|
||||||
|
-- `permission denied` и витрина сделок МЕРЫ теряла район.
|
||||||
|
-- Тот же урок, что в 188_regrant_quarter_price_index_fdw.sql: грант, лежащий в
|
||||||
|
-- отдельной миграции, переживает ровно до следующего пересоздания объекта.
|
||||||
|
-- Держим его рядом с CREATE, чтобы объект и его права ехали вместе.
|
||||||
|
--
|
||||||
|
-- ЧЕСТНО О ДЕЙСТВИИ: на ДЕЙСТВУЮЩЕМ проде эта строка не выполнится никогда —
|
||||||
|
-- деплой применяет только файлы, которых ещё нет в _schema_migrations, а 74-я
|
||||||
|
-- давно записана. Работу делает 194_grant_ekb_districts_fdw.sql. Здесь строка
|
||||||
|
-- нужна для чистой базы и для случая, когда файл прогоняют руками.
|
||||||
|
GRANT SELECT ON public.ekb_districts_geom TO tradein_fdw_reader;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue