我在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中设置了过滤器
我做错了什么?
2条答案
按热度按时间0g0grzrc1#
抱歉,目前您可以设置对整个数据库的访问权限https://clickhouse.yandex/docs/en/operations/access_rights/ 但是您可以通过行级安全性限制对表的访问,如下所述https://clickhouse.yandex/docs/en/operations/settings/settings_users/#user-名称数据库
qltillow2#
以下配置强制用户user1只能在select查询的结果中看到table1的行,其中id字段的值是1000。
筛选器可以是任何导致uint8类型值的表达式。它通常包含比较和逻辑运算符。不为此用户返回数据库\u name.table1中筛选结果为0的行。筛选与prewhere操作不兼容,并禁用where→prewhere优化。