【问题标题】:In Cassandra 2.2, Unable to Create Role containing Password在 Cassandra 2.2 中,无法创建包含密码的角色
【发布时间】:2015-10-27 13:04:29
【问题描述】:

按照 here 的文档,尝试创建一个新角色(以前的用户),该角色可以使用基于 Cassandra 2.2 中基于角色的新访问控制的密码登录,但未成功。

特别是以下语句提供了后续错误:

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

InvalidRequest: code=2200 [Invalid query] message="org.apache.cassandra.auth.CassandraRoleManager 不支持 PASSWORD"

上下文。 Fresh Cassandra 2.2 安装了 3 个节点。表 system_auth 仅包含以下表:resource_role_permissons_index role_permissions role_members roles -- 并且不包含旧的身份验证表,这是升级时的警告。

【问题讨论】:

  • 您可以使用 cassandra/cassandra 登录您的集群吗?
  • 是的,默认用户名/密码有效,这是发出“创建角色”命令时的上下文

标签: cassandra cql cassandra-2.0 cql3 cqlsh


【解决方案1】:

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

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

替代的 IAuthenticator 实现可以结合使用 with * CassandraRoleManager, 但 WITH PASSWORD = 'password' 不会 * 在 CREATE/ALTER ROLE 语句中被支持。

【讨论】:

  • 好问题。但在 cassandra.yaml 我有:验证器:PasswordAuthenticator 和授权器:AllowAllAuthorizer
  • 嗯,通常 AllowAllAuthorizer 只和 AllowAllAuthenticator 一起使用,不支持任何权限类型的工作。您可以尝试使用 CassandraAuthorizer 吗?
  • 很好的建议。不幸的是,刚刚切换到 CassandraAuthorizer,错误没有变化
  • 您不需要更改授权人,AllowAllAuthorizer 应该可以与 PasswordAuthenticator 和 CassandraRoleManager 一起正常工作。
【解决方案2】:

我怀疑问题是cassandra.yaml 中缺少 role_manager 选项 在这种情况下,Cassandra 会初始化默认角色管理器 (CassandraRoleManager) 的实例,但它会在配置完全处理之前执行此操作。具体来说,它会在设置 Authenticator 之前执行此操作,因此不会使用 PasswordAuthenticator 的正确选项对其进行初始化。

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

role_manager: CassandraRoleManager

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

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2016-02-26
    • 2018-09-08
    • 2014-12-20
    • 2013-04-06
    • 1970-01-01
    • 2021-12-20
    • 2015-06-27
    • 2019-05-04
    相关资源
    最近更新 更多