fix(clickhouse): устранены замечания ревью модели доступа

- Зачем:
  - документация и конфигурация доступа должны говорить только подтверждённое.
- Что:
  - ADR приведён к результату межшардового замера.
  - объяснены служебный грант и учебный компромисс remote().
  - удалены избыточные профили, README связан с ADR.
- Проверка:
  - make config-test, make lint, make smoke, make check-clickhouse, make check-services.
This commit is contained in:
2026-08-13 11:31:01 +03:00
parent 5627f6c7aa
commit d0f15bea02
4 changed files with 9 additions and 11 deletions
+3 -2
View File
@@ -251,8 +251,9 @@ uv run --project generator python -m clickstream_generator batch \
- `default` остаётся служебным: им ходят проверки здоровья и скрипты внутри - `default` остаётся служебным: им ходят проверки здоровья и скрипты внутри
контейнеров, но не приложения. контейнеров, но не приложения.
Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли Решение и его доводы — в [ADR 0007](docs/adr/0007-clickhouse-access.md).
и общий секрет нод живут в `.env` и передаются в конфигурацию через окружение; Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли и
общий секрет нод живут в `.env` и передаются в конфигурацию через окружение;
Superset получает пароль `bi` тем же путём через штатную функцию настройки. Superset получает пароль `bi` тем же путём через штатную функцию настройки.
Значения для локального стенда есть в `.env.example`. Значения для локального стенда есть в `.env.example`.
+2 -1
View File
@@ -32,7 +32,8 @@ EXPECTED_TABLES = [
# У Airflow одно подключение — к ноде 1; второго ради пробника не заводят. # У Airflow одно подключение — к ноде 1; второго ради пробника не заводят.
# Ноду 2 он читает через remote(), который не использует секрет из описания # Ноду 2 он читает через remote(), который не использует секрет из описания
# кластера, поэтому учётные данные etl передаются явно. Порт 9000 — нативный, # кластера, поэтому учётные данные etl передаются явно. Порт 9000 — нативный,
# тогда как подключение Airflow ходит по HTTP на 8123. # тогда как подключение Airflow ходит по HTTP на 8123. Trace-журнал сервера
# видит пароль: это допустимо только для локального учебного стенда.
NODES = ( NODES = (
("ноде 1", "system.tables"), ("ноде 1", "system.tables"),
( (
+3 -5
View File
@@ -63,11 +63,9 @@ DDS под ними, потому что так чаще всего и быва
данными по репликам, и там пароль вписан в каждую реплику каждого из трёх данными по репликам, и там пароль вписан в каждую реплику каждого из трёх
кластеров. кластеров.
Довод опирается на измеренное лишь наполовину: колонку `user` видно на живом Довод подтверждён замером 13 августа 2026 года: на соседнем шарде сохранился
стенде, а вот что права `bi` на соседнем шарде подменяются правами общей пользователь-инициатор, поэтому там применились его права. Результат замера —
учётки — вывод из неё, и он ждёт измерения (см. конец документа). Окажись в разделе «Что проверено».
вывод неверным, выбор секрета устоит по остальным основаниям, но перестанет
быть единственно возможным.
**Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах: **Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах:
повторный `make up` на живом стенде ничего не сдвигает, правка пароля повторный `make up` на живом стенде ничего не сдвигает, правка пароля
+1 -3
View File
@@ -18,6 +18,7 @@
<query>GRANT KAFKA ON *.*</query> <query>GRANT KAFKA ON *.*</query>
</grants> </grants>
</etl_writer> </etl_writer>
<!-- Оба читателя: clickhouse-connect читает system.settings при подключении. -->
<bi_reader> <bi_reader>
<grants> <grants>
<query>GRANT SELECT ON dds.*</query> <query>GRANT SELECT ON dds.*</query>
@@ -42,7 +43,6 @@
</default> </default>
<etl> <etl>
<password from_env="CLICKHOUSE_ETL_PASSWORD"/> <password from_env="CLICKHOUSE_ETL_PASSWORD"/>
<profile>default</profile>
<quota>default</quota> <quota>default</quota>
<grants> <grants>
<query>GRANT etl_writer</query> <query>GRANT etl_writer</query>
@@ -50,7 +50,6 @@
</etl> </etl>
<bi> <bi>
<password from_env="CLICKHOUSE_BI_PASSWORD"/> <password from_env="CLICKHOUSE_BI_PASSWORD"/>
<profile>default</profile>
<quota>default</quota> <quota>default</quota>
<grants> <grants>
<query>GRANT bi_reader</query> <query>GRANT bi_reader</query>
@@ -58,7 +57,6 @@
</bi> </bi>
<analyst> <analyst>
<password from_env="CLICKHOUSE_ANALYST_PASSWORD"/> <password from_env="CLICKHOUSE_ANALYST_PASSWORD"/>
<profile>default</profile>
<quota>default</quota> <quota>default</quota>
<grants> <grants>
<query>GRANT analyst_reader</query> <query>GRANT analyst_reader</query>