配置内部认证

Cassandra 不会要求用户使用默认配置登录。相反,无密码,任何能够连接到 native_transport_port 的人都可以匿名登录。通过编辑 cassandra.yaml 配置以使用不同的身份验证器可以更改此行为:

# Allow anonymous logins without authentication
# authenticator: AllowAllAuthenticator

# Use username/password based logins
authenticator: PasswordAuthenticator

PasswordAuthenticator 验证的登录凭证将存储在内部 system_auth 密钥空间中。默认情况下,不会在所有节点上复制键空间。你必须更改复制设置以确保 Cassandra 仍然能够从本地存储中读取用户凭据,以防无法访问群集中的其他节点,否则你可能无法登录!

对于 SimpleStrategy(其中 N 是集群中的节点数):

ALTER KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': N};

对于 NetworkTopologyStrategy(其中 N 是相应数据中心中的节点数):

ALTER KEYSPACE system_auth WITH replication =  { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : N };

在上述更改后重新启动每个节点。你现在只能使用默认超级用户登录:

cqlsh -u cassandra -p cassandra

(可选)将默认超级用户替换为自定义用户

使用带有标准密码的默认超级用户并不比完全不使用任何用户安全得多。你应该使用安全且唯一的密码来创建自己的用户:

CREATE ROLE myadminuser WITH PASSWORD = 'admin123' AND LOGIN = true AND SUPERUSER = true;

使用新用户登录:cqlsh -u myadminuser -p admin123

现在禁用标准 cassandra 用户的登录并删除超级用户状态:

ALTER ROLE cassandra WITH LOGIN = false AND SUPERUSER = false;