错误访问时Cassandra的行为是什么?

时间:2018-03-28 13:36:40

标签: cassandra datastax cassandra-2.0 cassandra-3.0

我想知道Cassandra在以下活动中的行为。

第1步 使用超级用户以 NOSUPERUSER 创建customer角色。

CREATE USER IF NOT EXISTS customer WITH PASSWORD 'Test27' NOSUPERUSER;

第2步# 使用超级用户在emp密钥空间中创建表test

CREATE TABLE test.emp (id INT PRIMARY KEY, emp_name TEXT );

第3步# 目前customer角色没有test.emp表的权限。

LIST ALL PERMISSIONS OF customer;
// empty result

第4步 使用SELECT角色对test.emp表进行customer查询。

SELECT * FROM test.emp;
// error: no permission for the role.

第5步 然后,使用超级用户角色向客户用户授予SELECT权限。

GRANT SELECT ON TABLE test.example TO customer;

第6步 再次尝试Step 4,收到同样的错误。

所以内部的Cassandra锁定查询访问权限或发生了什么?

2 个答案:

答案 0 :(得分:1)

第一次访问表时,可能会缓存权限。一旦授权缓存过期该用户条目,它就可以工作。您可以通过重新启动服务器或使用JMX删除授权缓存来强制执行此操作。

答案 1 :(得分:0)

您可以使用JMX刷新角色/权限缓存。下面的MBean名称和操作使缓存无效:

MBean org.apache.cassandra.auth:type=RolesCache
MBean org.apache.cassandra.auth:type=PermissionsCache

Invoke Operation : invalidate

还有yaml配置在后台更新缓存:

permissions_validity_in_ms
roles_validity_in_ms
permissions_update_interval_in_ms 

yaml config的默认值是2秒。如果缓存是问题,请尝试正确设置yaml配置。