Зачем: - Показать слой DDS как договор данных, которому не нужна физическая копия. - Сохранить простой учебный стенд без отдельного маршрута ради узких прав. Что: - Добавлено кластерное представление dds.event_v с явными 44 колонками. - Роли bi_reader разрешено чтение ODS, DDS и DM при договоре чтения через _v. - Согласованы мастер-спека, ADR, справочники архитектуры и живые тикеты этапа. - Зафиксировано исследование поведения DEFINER поверх Distributed. Проверка: - make config-test - make smoke - make check-clickhouse - Приёмочные запросы: равенство ODS/DDS, состав колонок, коды устройств и права bi.
132 lines
6.3 KiB
XML
132 lines
6.3 KiB
XML
<clickhouse>
|
|
<!--
|
|
Пользователи и роли объявлены файлом: повторный подъём стенда не хранит
|
|
доступ в томах. Пароли приходят из .env через Compose.
|
|
-->
|
|
<roles>
|
|
<etl_writer>
|
|
<grants>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW ON default.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE ON stg.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE ON ods.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE ON dds.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE ON dm.*</query>
|
|
<!-- Зона справочников: etl применяет её DDL и читает словари из преобразований. -->
|
|
<query>GRANT SELECT, CREATE TABLE, CREATE DICTIONARY, dictGet, DROP TABLE, CREATE DATABASE ON dic.*</query>
|
|
<query>GRANT SELECT ON system.*</query>
|
|
<query>GRANT CLUSTER ON *.*</query>
|
|
<query>GRANT REMOTE ON *.*</query>
|
|
<!--
|
|
В 26.3 движки внешних источников требуют права на источник.
|
|
Отказ при этом называет не источник, а `TABLE ENGINE ON File`
|
|
— и права с таким именем не хватит: замерено, нужен FILE.
|
|
-->
|
|
<query>GRANT KAFKA ON *.*</query>
|
|
<query>GRANT FILE ON *.*</query>
|
|
</grants>
|
|
</etl_writer>
|
|
<!-- Жизненный цикл мира: тот же канонический DDL, но с удалением баз. -->
|
|
<lifecycle_owner>
|
|
<grants>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE, DROP DATABASE ON stg.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE, DROP DATABASE ON ods.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE, DROP DATABASE ON dds.*</query>
|
|
<query>GRANT SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, CREATE DATABASE, DROP DATABASE ON dm.*</query>
|
|
<query>GRANT SELECT, CREATE TABLE, CREATE DICTIONARY, dictGet, DROP TABLE, DROP DICTIONARY, CREATE DATABASE, DROP DATABASE ON dic.*</query>
|
|
<!-- clickhouse-connect читает эту таблицу при подключении. -->
|
|
<query>GRANT SELECT ON system.settings</query>
|
|
<query>GRANT CLUSTER ON *.*</query>
|
|
<query>GRANT REMOTE ON *.*</query>
|
|
<query>GRANT KAFKA ON *.*</query>
|
|
<query>GRANT FILE ON *.*</query>
|
|
</grants>
|
|
</lifecycle_owner>
|
|
<!-- Оба читателя: clickhouse-connect читает system.settings при подключении. -->
|
|
<bi_reader>
|
|
<grants>
|
|
<query>GRANT SELECT ON ods.*</query>
|
|
<query>GRANT SELECT ON dds.*</query>
|
|
<query>GRANT SELECT ON dm.*</query>
|
|
<query>GRANT SELECT, dictGet ON dic.*</query>
|
|
<query>GRANT SELECT ON system.settings</query>
|
|
</grants>
|
|
</bi_reader>
|
|
<analyst_reader>
|
|
<grants>
|
|
<query>GRANT SELECT ON stg.*</query>
|
|
<query>GRANT SELECT ON ods.*</query>
|
|
<query>GRANT SELECT ON dds.*</query>
|
|
<query>GRANT SELECT ON dm.*</query>
|
|
<query>GRANT SELECT, dictGet ON dic.*</query>
|
|
<query>GRANT SELECT ON system.settings</query>
|
|
</grants>
|
|
</analyst_reader>
|
|
<monitoring_reader>
|
|
<grants>
|
|
<query>GRANT SELECT ON stg.*</query>
|
|
<query>GRANT SELECT ON ods.*</query>
|
|
<query>GRANT SELECT ON dds.*</query>
|
|
<query>GRANT SELECT ON dm.*</query>
|
|
<query>GRANT SELECT ON dic.*</query>
|
|
<query>GRANT SELECT ON system.*</query>
|
|
<query>GRANT CLUSTER ON *.*</query>
|
|
<query>GRANT REMOTE ON *.*</query>
|
|
</grants>
|
|
</monitoring_reader>
|
|
<!-- Учётка словаря: пароля нет намеренно, см. ADR 0007. -->
|
|
<dict_reader>
|
|
<grants>
|
|
<query>GRANT SELECT ON dic.*</query>
|
|
</grants>
|
|
</dict_reader>
|
|
</roles>
|
|
|
|
<users>
|
|
<default>
|
|
<password from_env="CLICKHOUSE_DEFAULT_PASSWORD"/>
|
|
</default>
|
|
<etl>
|
|
<password from_env="CLICKHOUSE_ETL_PASSWORD"/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT etl_writer</query>
|
|
</grants>
|
|
</etl>
|
|
<lifecycle>
|
|
<password from_env="CLICKHOUSE_LIFECYCLE_PASSWORD"/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT lifecycle_owner</query>
|
|
</grants>
|
|
</lifecycle>
|
|
<bi>
|
|
<password from_env="CLICKHOUSE_BI_PASSWORD"/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT bi_reader</query>
|
|
</grants>
|
|
</bi>
|
|
<analyst>
|
|
<password from_env="CLICKHOUSE_ANALYST_PASSWORD"/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT analyst_reader</query>
|
|
</grants>
|
|
</analyst>
|
|
<grafana>
|
|
<password from_env="CLICKHOUSE_GRAFANA_PASSWORD"/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT monitoring_reader</query>
|
|
</grants>
|
|
</grafana>
|
|
<dict>
|
|
<no_password/>
|
|
<quota>default</quota>
|
|
<grants>
|
|
<query>GRANT dict_reader</query>
|
|
</grants>
|
|
</dict>
|
|
</users>
|
|
</clickhouse>
|