From d0f15bea020035364720d55f671b44910032bc94 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Thu, 13 Aug 2026 11:31:01 +0300 Subject: [PATCH] =?UTF-8?q?fix(clickhouse):=20=D1=83=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=83=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - документация и конфигурация доступа должны говорить только подтверждённое. - Что: - ADR приведён к результату межшардового замера. - объяснены служебный грант и учебный компромисс remote(). - удалены избыточные профили, README связан с ADR. - Проверка: - make config-test, make lint, make smoke, make check-clickhouse, make check-services. --- README.md | 5 +++-- dags/test_clickhouse.py | 3 ++- docs/adr/0007-clickhouse-access.md | 8 +++----- infra/clickhouse/users.d/access.xml | 4 +--- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b32e471..fe91b6b 100644 --- a/README.md +++ b/README.md @@ -251,8 +251,9 @@ uv run --project generator python -m clickstream_generator batch \ - `default` остаётся служебным: им ходят проверки здоровья и скрипты внутри контейнеров, но не приложения. -Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли -и общий секрет нод живут в `.env` и передаются в конфигурацию через окружение; +Решение и его доводы — в [ADR 0007](docs/adr/0007-clickhouse-access.md). +Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли и +общий секрет нод живут в `.env` и передаются в конфигурацию через окружение; Superset получает пароль `bi` тем же путём через штатную функцию настройки. Значения для локального стенда есть в `.env.example`. diff --git a/dags/test_clickhouse.py b/dags/test_clickhouse.py index ab05aa9..91866ff 100644 --- a/dags/test_clickhouse.py +++ b/dags/test_clickhouse.py @@ -32,7 +32,8 @@ EXPECTED_TABLES = [ # У Airflow одно подключение — к ноде 1; второго ради пробника не заводят. # Ноду 2 он читает через remote(), который не использует секрет из описания # кластера, поэтому учётные данные etl передаются явно. Порт 9000 — нативный, -# тогда как подключение Airflow ходит по HTTP на 8123. +# тогда как подключение Airflow ходит по HTTP на 8123. Trace-журнал сервера +# видит пароль: это допустимо только для локального учебного стенда. NODES = ( ("ноде 1", "system.tables"), ( diff --git a/docs/adr/0007-clickhouse-access.md b/docs/adr/0007-clickhouse-access.md index 151e116..c350832 100644 --- a/docs/adr/0007-clickhouse-access.md +++ b/docs/adr/0007-clickhouse-access.md @@ -63,11 +63,9 @@ DDS под ними, потому что так чаще всего и быва данными по репликам, и там пароль вписан в каждую реплику каждого из трёх кластеров. -Довод опирается на измеренное лишь наполовину: колонку `user` видно на живом -стенде, а вот что права `bi` на соседнем шарде подменяются правами общей -учётки — вывод из неё, и он ждёт измерения (см. конец документа). Окажись -вывод неверным, выбор секрета устоит по остальным основаниям, но перестанет -быть единственно возможным. +Довод подтверждён замером 13 августа 2026 года: на соседнем шарде сохранился +пользователь-инициатор, поэтому там применились его права. Результат замера — +в разделе «Что проверено». **Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах: повторный `make up` на живом стенде ничего не сдвигает, правка пароля diff --git a/infra/clickhouse/users.d/access.xml b/infra/clickhouse/users.d/access.xml index caa8f6c..c66c711 100644 --- a/infra/clickhouse/users.d/access.xml +++ b/infra/clickhouse/users.d/access.xml @@ -18,6 +18,7 @@ GRANT KAFKA ON *.* + GRANT SELECT ON dds.* @@ -42,7 +43,6 @@ - default default GRANT etl_writer @@ -50,7 +50,6 @@ - default default GRANT bi_reader @@ -58,7 +57,6 @@ - default default GRANT analyst_reader