无法使用 ILP 和 RBAC 摄取数据

问题描述 投票:0回答:1

我正在使用 QuestDB Enterprise 2.1.1 并设置权限。当我使用内置管理员用户时,我可以使用 ILP 以编程方式提取数据,例如使用文档中的此代码片段

conf = f'http::addr=localhost:9000;username=admin;password=quest;auto_flush_rows=100;auto_flush_interval=1000;'
        with Sender.from_conf(conf) as sender:           
            sender.row(
                'trades',
                symbols={
                    'symbol': 'ETH-USD',
                    'side': 'sell'},
                columns={
                    'price': 2615.54,
                    'amount': 0.00044,
                   },
                at=datetime.datetime(
                        2022, 3, 8, 18, 53, 57, 609765,
                        tzinfo=datetime.timezone.utc))

我已经创建了一个用户:

create user ilp_ingest WITH PASSWORD ilp123;
grant ILP to ilp_ingest;
grant PGWIRE to ilp_ingest;

GRANT CREATE TABLE  to ilp_ingest;
GRANT INSERT  ON ilp_test to ilp_ingest;
grant select on all tables to ilp_ingest;

但是当我尝试使用

ilp_ingest
用户获取数据时,我的访问被拒绝。如果预先创建表或者我开始发送数据以启用表自动创建,都会发生这种情况。

我错过了什么?

database time-series questdb
1个回答
0
投票

在 QuestDB 中,您可以通过两种方式使用 ILP 协议摄取数据:TCP 传输或 HTTP 传输。通常不建议使用 TCP 传输,它的可用主要是由于历史原因。该代码段使用推荐的 HTTP 传输。

发生未授权问题是因为 QuestDB 需要

GRANT HTTP to user;

实际上,除非您计划使用 TCP 传输,否则您不需要授予

ILP
授权。

此外,建议不要使用

user
password
作为凭证,而建议生成 HTTP 令牌,如

ALTER USER ilp_ingest CREATE TOKEN TYPE REST WITH TTL ‘10d’ REFRESH;

在服务器端使用令牌更轻,这可以在摄取大量数据时产生不同的吞吐量。

然后我们可以将连接字符串上的用户和密码替换为

token
,如

所示
conf = f'http::addr=localhost:9000;token=XY132213wXXXXzzzzzzzzz;auto_flush_rows=100;auto_flush_interval=1000;'
© www.soinside.com 2019 - 2024. All rights reserved.