在Cassandra 2.2中,无法创建包含密码的角色

时间:2015-08-04 23:14:47

标签: cassandra cql cassandra-2.0 cql3 cqlsh

根据here中的文档,尝试使用Cassandra 2.2中新的基于角色的访问控制创建可以使用密码登录的新角色(以前称为用户)失败。

具体而言,以下语句提供了后续错误:

CREATE ROLE pam WITH PASSWORD = 'abc123' AND LOGIN = true;

InvalidRequest:code = 2200 [无效查询] message =" org.apache.cassandra.auth.CassandraRoleManager不支持PASSWORD"

上下文。新鲜的Cassandra 2.2安装3节点。表system_auth仅具有以下表:resource_role_permissons_index role_permissions role_members roles - 并且不包含旧版auth表,这是升级时的警告。

2 个答案:

答案 0 :(得分:1)

您是否在节点中使用IAuthenticator?切换到使用PasswordAuthenticator来支持使用密码。

以下摘自CassandraRoleManager:https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/auth/CassandraRoleManager.java

页面
  

替代IAuthenticator实现可以结合使用   使用* CassandraRoleManager,但WITH PASSWORD ='密码'将不会   在CREATE / ALTER ROLE语句中得到支持*。

答案 1 :(得分:1)

我怀疑问题是public class PendingIntentHolder { public static PendingIntent instance = new PendingIntent(); static PendingIntent pendingIntent; public static void setPending(PendingIntent intent) { pendingIntent= intent; } public static PendingIntent getPending() { return pendingIntent; } } 中缺少role_manager选项 在这种情况下,Cassandra初始化默认角色管理器(cassandra.yaml)的实例,但它在配置完全处理之前完成。具体来说,它是在设置Authenticator之前完成的,所以它没有使用CassandraRoleManager的正确选项进行初始化。

幸运的是,有一个简单的解决方法是确保将角色管理器设置添加到PasswordAuthenticator

cassandra.yaml

Cassandra bug追踪器的门票是CASSANDRA-10209。这表明该错误已在Cassandra 2.2.2和3.0.0中得到修复。