clickhouse仅为用户提供对数据库中多个表的访问权限

ds97pgxw  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(549)

我在clickhouse有两个数据库:
测试
测试2
此数据库中的表是通过查询创建的:

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);

现在我想创建一个新的readonly用户来访问数据库test,但只针对这个db中的表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 我看到了所有的行,但是我已经在permissions only show id-eq 1中设置了过滤器
我做错了什么?

0g0grzrc

0g0grzrc1#

抱歉,目前您可以设置对整个数据库的访问权限https://clickhouse.yandex/docs/en/operations/access_rights/ 但是您可以通过行级安全性限制对表的访问,如下所述https://clickhouse.yandex/docs/en/operations/settings/settings_users/#user-名称数据库

<user1>
<databases>
    <database_name>
        <!-- filter all rows from table -->
        <table1>
            <filter>1 = 0</filter>
        </table1>
    </database_name>
</databases>
</user1>
qltillow

qltillow2#

以下配置强制用户user1只能在select查询的结果中看到table1的行,其中id字段的值是1000。

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

筛选器可以是任何导致uint8类型值的表达式。它通常包含比较和逻辑运算符。不为此用户返回数据库\u name.table1中筛选结果为0的行。筛选与prewhere操作不兼容,并禁用where→prewhere优化。

相关问题