我在Clickhouse有两个数据库:
此数据库中由查询创建的表:
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);现在,我希望创建一个新的只读用户,它可以访问数据库测试,但只用于此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时,我会看到所有的行,但是我已经在权限中设置了筛选器,只显示id -eq 1。
我做错了什么?
发布于 2019-09-17 05:48:04
对不起,但目前您可以将访问权限设置为整个数据库rights/,但可以限制对表的访问,如此处所述的行级安全性。
<user1>
<databases>
<database_name>
<!-- filter all rows from table -->
<table1>
<filter>1 = 0</filter>
</table1>
</database_name>
</databases>
</user1>发布于 2019-09-17 06:57:27
下面的配置强制用户user1只能看到table1的行,这是SELECT查询的结果,其中id字段的值为1000。
<user1>
<databases>
<database_name>
<table1>
<filter>id = 1000</filter>
</table1>
</database_name>
</databases>
</user1>筛选器可以是任何表达式,从而产生UInt8 8类型的值。它通常包含比较和逻辑运算符。此用户不返回筛选器结果为0的database_name.table1中的行。过滤与PREWHERE操作不兼容,并且禁用→PREWHERE优化的地方。
https://stackoverflow.com/questions/57953070
复制相似问题