我想知道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锁定查询访问权限或发生了什么?
答案 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配置。