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 вместо ошибки.
26 lines
1.6 KiB
PL/PgSQL
26 lines
1.6 KiB
PL/PgSQL
-- 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;
|