首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClickHouse只对数据库中的几个表授予用户访问权限

ClickHouse只对数据库中的几个表授予用户访问权限
EN

Stack Overflow用户
提问于 2019-09-16 08:30:51
回答 2查看 3.5K关注 0票数 0

我在Clickhouse有两个数据库:

  • 测试
  • test2

此数据库中由查询创建的表:

代码语言:javascript
复制
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);

我为这些数据库创建了两个用户。这样的用户权限:

代码语言:javascript
复制
        <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>

我在这些表格中得到了一些数据--它是这样插入的:

代码语言:javascript
复制
INSERT INTO test.Migrations3 (date) VALUES (689);

现在,我希望创建一个新的只读用户,它可以访问数据库测试,但只用于此DB中的表Migrations3,而不是数据库中的所有表。我读过文档,也找不到如何设置这个访问权限。

现在,我尝试使用以下权限:

代码语言:javascript
复制
<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。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2019-09-17 05:48:04

对不起,但目前您可以将访问权限设置为整个数据库rights/,但可以限制对表的访问,如此处所述的行级安全性。

代码语言:javascript
复制
<user1>
<databases>
    <database_name>
        <!-- filter all rows from table -->
        <table1>
            <filter>1 = 0</filter>
        </table1>
    </database_name>
</databases>
</user1>
票数 2
EN

Stack Overflow用户

发布于 2019-09-17 06:57:27

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

代码语言:javascript
复制
<user1>
<databases>
    <database_name>
        <table1>
            <filter>id = 1000</filter>
        </table1>
    </database_name>
</databases>
</user1>

筛选器可以是任何表达式,从而产生UInt8 8类型的值。它通常包含比较和逻辑运算符。此用户不返回筛选器结果为0的database_name.table1中的行。过滤与PREWHERE操作不兼容,并且禁用→PREWHERE优化的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57953070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档