fix(deploy): mute psql set_config stdout — prevent password leak in CI logs
Review-bot PR #510 нашёл P0: `set_config(name,value,is_local)` возвращает установленное значение, psql печатает rows на stdout без `-q`/`-A`/`-t`, итог — фактический pw появляется в Forgejo Actions deploy logs (retained, visible всем с repo read access). Fix: оборачиваем оба `SELECT set_config(...)` в `\o /dev/null` / `\o` brackets. Output mutes только для этих строк — NOTICE-сообщения из DO block (idempotency signal 'tradein_fdw_reader password set') остаются видимыми. Также добавлен rollback hint в комментарии: НЕ revert файл (вернёт сломанный :'pw' внутри $$), а unset GENDESIGN_FDW_PASSWORD в .env.runtime на VPS.
This commit is contained in:
parent
da7814810c
commit
08a8cf51b3
1 changed files with 17 additions and 1 deletions
|
|
@ -17,8 +17,21 @@
|
||||||
-- Reference incident: deploy 2026-05-24 (post-merge PR #503) упал на
|
-- Reference incident: deploy 2026-05-24 (post-merge PR #503) упал на
|
||||||
-- "syntax error at or near ':'" в LINE 4 этого файла — :'pw' дошёл до сервера
|
-- "syntax error at or near ':'" в LINE 4 этого файла — :'pw' дошёл до сервера
|
||||||
-- as literal вместо интерполяции.
|
-- as literal вместо интерполяции.
|
||||||
|
--
|
||||||
|
-- ⚠️ `set_config(name, value, is_local) -> text` ВОЗВРАЩАЕТ установленное
|
||||||
|
-- значение. Без `\o /dev/null` бы psql напечатал password на stdout → leak в
|
||||||
|
-- Forgejo Actions deploy logs (retained, visible всем с repo read access).
|
||||||
|
-- Поэтому оборачиваем оба set_config вызова в `\o /dev/null` / `\o` brackets
|
||||||
|
-- — output mutes только для этих строк, NOTICE-сообщения из DO block
|
||||||
|
-- (idempotency signal) остаются видимыми.
|
||||||
|
--
|
||||||
|
-- Rollback path: НЕ revert этого файла (вернёт сломанный `:'pw'` внутри $$).
|
||||||
|
-- Корректный rollback — unset GENDESIGN_FDW_PASSWORD в /opt/gendesign/backend
|
||||||
|
-- /.env.runtime на VPS, deploy.yml тогда пропустит этот шаг полностью.
|
||||||
|
|
||||||
|
\o /dev/null
|
||||||
SELECT set_config('app.fdw_pw', :'pw', false);
|
SELECT set_config('app.fdw_pw', :'pw', false);
|
||||||
|
\o
|
||||||
|
|
||||||
DO $$
|
DO $$
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
@ -31,5 +44,8 @@ BEGIN
|
||||||
END $$;
|
END $$;
|
||||||
|
|
||||||
-- Clear GUC after use (defense-in-depth — не оставляем password в session state
|
-- Clear GUC after use (defense-in-depth — не оставляем password в session state
|
||||||
-- даже на short connection).
|
-- даже на short connection). Same \o trick — set_config return value is empty
|
||||||
|
-- string here, но всё равно лишний row в stdout не нужен.
|
||||||
|
\o /dev/null
|
||||||
SELECT set_config('app.fdw_pw', '', false);
|
SELECT set_config('app.fdw_pw', '', false);
|
||||||
|
\o
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue