GrantForge

    Базы данных / Аналитические (OLAP)

    ClickHouse

    Установка и настройка плагина сервиса ClickHouse, подключение к одному или нескольким серверам, вход по паролю или по клиентскому сертификату TLS, поиск баз данных, таблиц и столбцов и управление тем, кто что может читать, записывать и администрировать, вплоть до столбцов и строк.

    Плагин ClickHouse находит базы данных, таблицы и столбцы и управляет политиками доступа в терминах самого ClickHouse: чтение и запись столбцов, изменение, удаление, очистка и оптимизация таблиц, создание таблиц в базе данных и её удаление, а на сервере — создание баз данных, KILL QUERY и инструкции SYSTEM, с фильтрами строк таблиц. Идентификатор плагина и тип сервиса — clickhouse. Плагин сервиса работает в сервере GrantForge; политики применяет агент ClickHouse — сервис рядом с серверами — с помощью собственных привилегий и политик строк ClickHouse.

    Интеграционные тесты Testcontainers в репозитории охватывают ClickHouse 24.8, 25.3, 25.8, 26.3 и 26.8 — выпуски с долгосрочной поддержкой за последние два года; это не означает сертификацию всех остальных версий.

    Установка

    Дистрибутив содержит плагин в plugins/clickhouse. Убедитесь в Управление платформой → Плагины, что clickhouse включён; после обновления заново просканируйте каталог плагинов. Плагин обращается к серверам по HTTP через собственный Java-клиент ClickHouse в отдельном загрузчике классов.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите ClickHouse (clickhouse).
    2. Укажите URL HTTP-интерфейса сервера или нескольких серверов.
    3. Выберите, как входит пользователь для поиска, укажите имя пользователя и учётные данные, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает сервер: его версию ClickHouse, пользователя, под которым выполнен вход, и сколько баз данных видит этот пользователь.

    Пользователь для поиска позволяет GrantForge находить ресурсы; он не связан с пользователями, которые читают и пишут. Успешная проверка подключения не означает, что доступ уже подчиняется политикам.

    Параметр Назначение
    clickhouse.urls Обязательный: HTTP-интерфейс сервера, например https://clickhouse1.example.com:8443; несколько через запятую, по очереди, если какой-то недоступен
    authentication password (по умолчанию) или certificate: клиентский сертификат TLS, который ClickHouse сопоставляет с пользователем (IDENTIFIED WITH ssl_certificate)
    username Обязательный: пользователь для поиска
    password password: пароль пользователя для поиска; хранится зашифрованным
    ssl.root.certificate https: сертификат CA в формате PEM на сервере GrantForge, по которому проверяются серверы; пустое значение — сертификаты JVM
    ssl.client.certificate, ssl.client.key certificate: клиентский сертификат PEM и его закрытый ключ на сервере GrantForge; вход по сертификату требует серверов https://
    timeout Сколько может длиться запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд

    Параметры одного способа входа отклоняются при другом, так что сервис точно указывает, как он входит. Отклонённый вход, пользователь только для чтения, недоступный сервер или сервер, чей сертификат нельзя проверить, а также ответ не от ClickHouse вместо него, например от прокси, сообщаются как таковые.

    Что видит пользователь для поиска

    ClickHouse показывает пользователю только те базы данных, таблицы и столбцы, на которые у него есть хоть какая-то привилегия. Выдайте пользователю для поиска SHOW на то, для чего будут писаться политики, например GRANT SHOW ON *.* TO grantforge_lookup: так он видит имена, не читая данных. Собственные базы данных ClickHouse, system и information_schema, не учитываются: политики их не решают.

    Ресурсы и типы доступа

    Уровень Сопоставление Типы доступа
    database Шаблон, с учётом регистра; имя базы данных create, drop_database
    table Шаблон, с учётом регистра; внутри базы данных alter, drop, truncate, optimize
    column Шаблон, с учётом регистра; внутри таблицы select, insert
    server Единственное значение * create_database, kill_query, system
    Тип доступа Привилегии ClickHouse
    select, insert SELECT, INSERT на столбцы
    alter ALTER: любое изменение таблицы, включая ALTER UPDATE и ALTER DELETE
    drop DROP TABLE, DROP VIEW, DROP DICTIONARY
    truncate, optimize TRUNCATE, OPTIMIZE
    create CREATE TABLE, CREATE VIEW, CREATE DICTIONARY в базе данных
    drop_database DROP DATABASE
    create_database, kill_query, system CREATE DATABASE, KILL QUERY, SYSTEM: любая инструкция SYSTEM

    Чтение и запись решаются по столбцам, так же как их выдаёт ClickHouse: политика для select или insert называет столбцы, * — все. Поэтому политика может разрешить таблицу и запретить один её столбец, и пользователь сможет читать все остальные. В значениях политик * соответствует любой последовательности символов, а ? — одному символу. Редактор политик подсказывает базы данных, таблицы баз, названных политикой, и их столбцы.

    Типы доступа не совпадают ни с одной группой привилегий ClickHouse вроде ALL: каждый означает ровно то, что написано, поэтому политика никогда не даёт больше, чем называет. В ClickHouse нет маскирования столбцов вне ClickHouse Cloud, поэтому этот тип сервиса его не предлагает.

    Фильтры строк

    Политика фильтрации строк таблицы показывает её пользователям строки, для которых выполняется условие. Условие — выражение ClickHouse в том виде, в каком его принимают политики строк, например region = 'EU' или owner = currentUser(). Пользователь видит фильтр первой применимой к нему политики, как и в других сервисах.

    Пример политик

    Пусть на сервере есть базы данных sales и hr. Создайте в одном сервисе данных такие включённые политики:

    Ресурсы Правило
    database=sales, table=*, column=* Разрешить select группе analysts
    database=sales, table=orders, column=card Запретить select группе analysts
    database=sales, table=orders, column=* Разрешить insert пользователю ingest
    database=team_* Разрешить create группе data-team
    database=team_*, table=* Разрешить alter, drop, truncate и optimize группе data-team
    database=team_*, table=*, column=* Разрешить select и insert группе data-team
    server=* Разрешить create_database группе data-team
    database=sales, table=orders (фильтр строк) Показывать пользователю emea строки region = 'EMEA'

    Когда агент применит новый снимок, участники analysts будут читать все таблицы sales, кроме номеров карт в orders; ingest будет записывать в orders и ничего не читать; участники data-team будут создавать базы данных, а в тех, чьё имя начинается с team_, — таблицы, читать, записывать и изменять их; а emea, если какая-то политика позволит ему читать orders, будет видеть только строки своего региона.

    Применение политик

    Плагин сервиса управляет политиками и находит ресурсы. Для их применения нужен агент ClickHouse, один на сервер или кластер. Развёртывание и проверки описаны в разделе агент ClickHouse.

    Связанные руководства

    Редактировать эту страницу на GitHub