ClickHouse предоставляет пользователю права доступа только к нескольким таблицам в базе данных

У меня в Clickhouse две базы данных:

  • тестовое задание
  • test2

Таблицы в этой БД, созданные запросом:

CREATE TABLE test.Migrations3 ( date Date DEFAULT toDate(now()), id UInt8, time UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/shard/test/Migrations3', 'clickhouse1', date, (id, time), 8192);

и я создаю двух пользователей для этих баз данных. Разрешения пользователя такие:

        <user>
            <password>pass</password>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip>
                <ip>127.0.0.1</ip>
            </networks>
            <!-- Settings profile for user. -->
            <profile>default</profile>
            <!-- Quota for user. -->
            <quota>default</quota>

        </user>

Я получил некоторые данные в этих таблицах, они были вставлены следующим образом:

INSERT INTO test.Migrations3 (date) VALUES (689);

Теперь я хочу создать нового пользователя только для чтения с доступом к тесту базы данных, но только для таблицы Migrations3 в этой БД, а не для всех таблиц в базе данных. Я прочитал документацию и не могу найти, как настроить этот доступ.

Теперь я пытаюсь использовать эти разрешения:

<user1>
    <databases>
        <test>
            <Migrations3>
                <filter>id = 1</filter>
            </Migrations3>
        </test>
    </databases>

    <password>pass</password>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip>
                <ip>127.0.0.1</ip>
            </networks>
            <!-- Settings profile for user. -->
            <profile>readonly</profile>
            <!-- Quota for user. -->
            <quota>default</quota>
<allow_databases>
<database>test</database>
</allow_databases>

</user1>

Когда я запускаю select * from test.Migrations3, я вижу все строки, но я уже настроил фильтр в разрешениях, показывающий только id -eq 1

Что я делаю не так?


person Darkwind    schedule 16.09.2019    source источник
comment
Прочтите это и улучшите качество своего вопроса: stackoverflow.com/help/mcve   -  person jasie    schedule 17.09.2019


Ответы (2)


извините, но в настоящее время вы можете установить право доступа ко всей базе данных https://clickhouse.yandex/docs/en/operations/access_rights/, но вы можете ограничить доступ к таблицам на уровне безопасности на уровне строк, как описано здесь https://clickhouse.yandex/docs/en/operations/settings/settings_users/#user-name-databases

<user1>
<databases>
    <database_name>
        <!-- filter all rows from table -->
        <table1>
            <filter>1 = 0</filter>
        </table1>
    </database_name>
</databases>
</user1>
person Slach    schedule 17.09.2019
comment
Когда я запускаю select * from test.Migrations3, я вижу все строки, но я уже настроил фильтр в разрешениях, показывающий только id -eq 1 Я добавляю свои разрешения в вопрос «Что я делаю не так?» - person Darkwind; 17.09.2019
comment
Вы уверены, что выполняете запрос от пользователя user1? не могли бы вы запустить SELECT currentUser()? - person Slach; 18.09.2019
comment
Да, я уверен. Я не могу подключиться к другой БД, но я выбираю все в БД, где у меня есть разрешения - person Darkwind; 19.09.2019

Следующая конфигурация заставляет пользователя user1 видеть только строки таблицы table1 в результате запросов SELECT, где значение поля id равно 1000.

<user1>
<databases>
    <database_name>
        <table1>
            <filter>id = 1000</filter>
        </table1>
    </database_name>
</databases>
</user1>

Фильтр может быть любым выражением, приводящим к значению типа UInt8. Обычно он содержит сравнения и логические операторы. Строки из database_name.table1, где результаты фильтрации до 0, для этого пользователя не возвращаются. Фильтрация несовместима с операциями PREWHERE и отключает оптимизацию WHERE → PREWHERE.

person Tej    schedule 17.09.2019
comment
Пожалуйста, добавьте пояснительный текст к вашему ответу. Узнайте больше здесь, stackoverflow.com/help/how-to-answer - person jasie; 17.09.2019
comment
Предоставленный ответ был помечен для просмотра как сообщение низкого качества. Вот несколько рекомендаций по Как мне написать хороший ответ?. Этот предоставленный ответ может быть правильным, но для него может быть полезно объяснение. Ответы только на код не считаются хорошими ответами. Из обзора. - person Trenton McKinney; 17.09.2019
comment
Когда я запускаю select * from test.Migrations3, я вижу все строки, но я уже настроил фильтр в разрешениях, показывающий только id -eq 1 Я добавляю свои разрешения в вопрос «Что я делаю не так?» - person Darkwind; 17.09.2019
comment
какую версию clickhouse вы используете? пожалуйста, запустите SELECT version()? - person Slach; 19.09.2019
comment
Версия: 18.12.17 - person Tej; 20.09.2019
comment
не могли бы вы обновить установку Clickhouse? насколько я знаю, безопасность на уровне строк добавлена ​​в версии 19.x - person Slach; 02.10.2019