fix(clickhouse): устранены замечания ревью модели доступа
- Зачем: - документация и конфигурация доступа должны говорить только подтверждённое. - Что: - ADR приведён к результату межшардового замера. - объяснены служебный грант и учебный компромисс remote(). - удалены избыточные профили, README связан с ADR. - Проверка: - make config-test, make lint, make smoke, make check-clickhouse, make check-services.
This commit is contained in:
@@ -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`.
|
||||||
|
|
||||||
|
|||||||
@@ -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"),
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -63,11 +63,9 @@ DDS под ними, потому что так чаще всего и быва
|
|||||||
данными по репликам, и там пароль вписан в каждую реплику каждого из трёх
|
данными по репликам, и там пароль вписан в каждую реплику каждого из трёх
|
||||||
кластеров.
|
кластеров.
|
||||||
|
|
||||||
Довод опирается на измеренное лишь наполовину: колонку `user` видно на живом
|
Довод подтверждён замером 13 августа 2026 года: на соседнем шарде сохранился
|
||||||
стенде, а вот что права `bi` на соседнем шарде подменяются правами общей
|
пользователь-инициатор, поэтому там применились его права. Результат замера —
|
||||||
учётки — вывод из неё, и он ждёт измерения (см. конец документа). Окажись
|
в разделе «Что проверено».
|
||||||
вывод неверным, выбор секрета устоит по остальным основаниям, но перестанет
|
|
||||||
быть единственно возможным.
|
|
||||||
|
|
||||||
**Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах:
|
**Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах:
|
||||||
повторный `make up` на живом стенде ничего не сдвигает, правка пароля
|
повторный `make up` на живом стенде ничего не сдвигает, правка пароля
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user