feat(clickhouse): добавлены роли и межнодовый секрет

- Зачем:
  - менти должен увидеть разделение доступа без состояния в томах.
- Что:
  - пользователи и роли объявлены файлом с паролями из окружения.
  - межшардовые запросы передают пользователя через общий секрет.
  - четыре допущения реализации подтверждены в ADR живыми замерами.
- Проверка:
  - make config-test, make smoke, make check-clickhouse, make check-services.
This commit is contained in:
2026-08-13 10:04:58 +03:00
parent 41d057252e
commit 790f7c1bb7
5 changed files with 92 additions and 10 deletions
+13 -9
View File
@@ -132,12 +132,16 @@ Postgres и Grafana. Цена выбора известна: объявленн
настройки ClickHouse.
- Весь DDL репозитория идёт через `IF NOT EXISTS` (файлы `sql/ddl/`).
Осталось проверить при исполнении, и это работа тикета реализации: точная
форма объявления секрета в описании кластера (готового примера в
документации не нашлось); работает ли подстановка из окружения именно для
пароля пользователя, и если нет — пароли лягут в файл настройки прямым
текстом, а README назовёт это вслух; применяются ли на соседнем шарде права
`bi`, а не общей учётки (вывод из колонки `user`, живьём не измерен —
проверка требует создать пользователя); принимает ли ClickHouse права,
выданные на ещё не созданную базу — на момент решения `dds` и `dm` не
существуют.
Проверено на живом стенде 13 августа 2026 года, ClickHouse 26.3.17.56.
- Секрет кластера принимается внутри `remote_servers` в виде
`<secret from_env="CLICKHOUSE_CLUSTER_SECRET"/>`. Запрос от `etl` через обе
ноды выполнился на каждой под пользователем `etl`.
- `from_env` работает у элемента `password`: `etl`, `bi` и `analyst` вошли с
паролями из окружения и получили свои роли.
- При запросе от `bi` через Distributed на второй ноде `system.query_log`
показал `user = bi` и `initial_user = bi`. Значит, на соседнем шарде
применяются права инициатора, а не общей учётной записи.
- Права на отсутствующие базы `dds` и `dm` приняты. До создания баз они видны
в `SHOW GRANTS FOR etl_writer`; временная таблица в `dm` подтвердила право
`bi` на чтение после появления базы.