我使用的是RethinkDB发布订阅。
对于交换,我使用一个名为'RPI_messages'的db和三个表:
Connector_messages
MAC_messages
Orders我想介绍一些有关生产者和消费者方面的基本认证,如:
r.db('rethinkdb').table('users').insert({id: 'lis', password: 'somepassword'})
r.db('rethinkdb').table('users').insert({id: 'rpi', password: 'someotherpassword'})
r.db('RPi_messages').grant('lis', {read: false, write: true, config: true}) //producer
r.db('RPi_messages').grant('rpi', {read: true, write: false, config: true}) //consumersr.db('rethinkdb').table('permissions')显示了这一点:
{
"database": "RPi_messages" ,
"id": [
"lis" ,
"007928e5-c654-4311-b3aa-a834c62dcf88"
] ,
"permissions": {
"config": true ,
"read": false ,
"write": true
} ,
"user": "lis"
}问题:当我试图发布或订阅exchange时,它会抛出一个异常:
ReqlPermissionError: User `lis` does not have the required `config` permission in:
r.db_create('RPi_messages')
rethinkdb.errors.ReqlPermissionError: User `rpi` does not have the required `config` permission in:
r.db_create('RPi_messages')这是否意味着我的用户需要拥有全局权限?任何帮助都非常感谢。
发布于 2022-10-31 16:14:24
所以,经过相当多的尝试和错误,我使它工作。对于其他任何人:对于发布子系统中的每个用户,您都需要在全局范围上获得config许可,如下所示:
r.grant('lis', {read: false, write: false, config: true});
r.grant('rpi', {read: false, write: false, config: true});...and对表或(在我的例子中)数据库作用域上的权限如下:
r.db('RPi_messages').grant('lis', {read: true, write: true, config: true}); //publisher
r.db('RPi_messages').grant('rpi', {read: true, write: false, config: true}); //sunscriber如果我错了就纠正我,但这在我看来不太安全。这些权限是必需的,因为want的pub子系统中的exchange类会查看exchange表是否存在,如果它不存在就会创建。这意味着,任何获得客户端订阅设备的人都可以在数据库中创建任意数量的表。
https://stackoverflow.com/questions/74265833
复制相似问题