Cassandra JMX 身份验证和授权:创建用户

有两种类型的安全性 Apache Cassandra 以及 DataStax Enterprise。
- 内部身份验证
- 授权
什么是内部身份验证和授权
内部身份验证本质上是验证用户连接。用户通过登录名和密码进行身份验证。所有用户帐户都由内部管理系统管理。 Cassandra 内部。
内部授权处理的是用户的权限,即用户可以执行哪些操作。例如,我们可以授予用户不同的权限,例如哪些用户只有数据读取权限,哪些用户有数据写入权限,哪些用户有数据删除权限。
但是,也可以使用 Kerberos(Kerberos 用于安全地管理凭据)和 LDAP(LDAP 用于保存有关帐户的权威信息,例如它们被允许访问的内容)从外部控制身份验证。
外部身份验证是 Kerberos 和 LDAP 支持的身份验证。 Apache Cassandra 不支持外部身份验证。
只有 DataStax Enterprise 支持使用 Kerberos 和 LDAP 进行外部身份验证,而内部身份验证则同时支持这两种方式。 Apache Cassandra 以及 DataStax Enterprise。
配置身份验证和授权
In Cassandra默认情况下,身份验证和授权选项处于禁用状态。您需要配置 cassandra.yaml 文件以启用身份验证和授权。
打开 cassandra.yaml 文件,取消注释处理内部身份验证和授权的行,如下所示。
- 在 cassandra.yaml 文件中,默认情况下,身份验证器值为“AllowAllAuthenticator”。请将此身份验证器值从“AllowAllAuthenticator”更改为“com.datastax.bdp.cassandra.auth.PasswordAuthenticator”。
- 同样,在 cassandra.yaml 中,默认情况下授权器值为“AllowAllAuthorizer”。将此授权器值从“AllowAllAuthorizer”更改为“com.datastax.bdp.cassandra.auth”。Cassandra授權人”。
这两个类名是 DataStax Enterprise 的值。在开源软件中 Apache Cassandra 相同的设置 PasswordAuthenticator 和 CassandraAuthorizer凭证随后会保存在 system_auth 键空间,其复制因子应提高到 1 以上。
登录
现在身份验证已启用,如果您尝试访问任何密钥空间, Cassandra 将返回错误。
默认情况下, Cassandra 提供用户名“cassandra”和密码“cassandra”的超级账户。登录“cassandra”账户后,您可以执行任何操作。
让我们看看下面的截图,如果你不使用默认设置,它将不允许您登录 Cassandra “用户名和密码”。
现在,在第二张截图中,你可以看到使用后的效果 Cassandra 默认登录凭证,您就可以登录。
您还可以使用此帐户创建另一个用户。建议您更改默认密码。以下是以该用户身份登录的示例。 Cassandra 用户并更改默认密码。
alter user cassandra with password 'newpassword';
创建新用户
可以使用“cassandra”帐户创建新帐户。
创建新用户时,需要指定登录名和密码,以及该用户是否为超级用户。只有超级用户才能创建新用户。
create user robin with password 'manager' superuser; create user robin with password 'newhire';
您可以通过以下语法获取所有用户的列表。
list users;
输出结果列出了每个账户及其超级用户标志。
可以使用以下语法删除用户。
drop user laura;
授权
授权是指为用户分配权限,决定特定用户可以执行哪些操作。
以下是为用户分配权限的通用语法。
GRANT permission ON resource TO user
可以授予用户以下类型的权限。
- 全部
- 改变
- 授权
- CREATE
- 下降
- 调整
- 选择
以下是向用户分配权限的示例。
Create user laura with password 'newhire'; grant all on dev.emp to laura; revoke all on dev.emp to laura; grant select on dev.emp to laura;
创建新用户“laura”,密码为“newhire”。
以下示例展示了用户“laura”尝试访问 emp_bonus 表的情况。Laura 只有访问 dev.emp 表的权限,而没有访问 dev.emp_bonus 表的权限,因此返回了错误。
select* form emp_bonus;
您可以获取分配给用户的所有权限列表。以下是获取权限信息的示例。
list all permissions of laura;
您还可以列出资源的所有权限。以下是从表中获取权限的示例。
list all permissions on dev.emp;
配置防火墙
如果防火墙正在运行,则必须打开以下端口才能进行节点之间的通信,其中包括一些 Cassandra 端口。如果 Cassandra 不会开放端口, Cassandra 节点将作为独立的数据库服务器运行,而不是加入数据库集群。
Cassandra 客户端端口
| 端口号 | 描述 |
|---|---|
| 9042 | Cassandra 客户端端口 |
| 9160 | Cassandra 客户端端口 Thrift |
Cassandra 节点间端口
| 端口号 | 描述 |
|---|---|
| 7000 | Cassandra 节点间集群通信 |
| 7001 | Cassandra SSL 节点间集群通信 |
| 7199 | Cassandra JMX监控端口 |
公共端口
| 端口号 | 描述 |
|---|---|
| 22 | SSH端口 |
| 8888 | OpsCenter 网站。浏览器 http 请求。 |
Cassandra OpsCenter 端口
| 端口号 | 描述 |
|---|---|
| 61620 | OpsCenter 监控端口。 |
| 61621 | Opscenter 代理端口 |
当前驱动程序仅使用 9042 端口;9160 端口用于传统的 Thrift 接口,在新集群上可以保持关闭状态。
启用 JMX 身份验证
使用默认设置 CassandraJMX 只能从本地主机访问。如果要远程访问 JMX,请修改 cassandra-env.sh 文件中的 LOCAL_JMX 设置,并启用身份验证或 SSL。
启用 JMX 身份验证后,确保 操作中心 和 nodetool 配置为使用身份验证。
程序
启用 JMX 身份验证的步骤如下。
- 在 cassandra-env.sh 文件中,添加或更新以下行。
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true" JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
另外,请更改 cassandra-env.sh 中的 LOCAL_JMX 设置。
LOCAL_JMX=no
- 将 /jdk_install_location/lib/management/ 中的 jmxremote.password.template 复制到 /etc/cassandra/ 并将其重命名为 jmxremote.password。
cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password - 将 jmxremote.password 的所有权更改为您运行的用户 Cassandra 并更改权限为只读。
chown cassandra:cassandra /etc/cassandra/jmxremote.password chmod 400 /etc/cassandra/jmxremote.password
- 编辑 jmxremote.password 并添加 JMX 兼容实用程序的用户和密码:
monitorRole QED controlRole R&D cassandra cassandrapassword
- 添加 Cassandra 对 /jdk_install_location/lib/management/jmxremote.access 具有读写权限的用户
monitorRole readonly cassandra readwrite controlRole readwrite \ create javax.management.monitor.,javax.management.timer. \ unregister
- 重新启动 Cassandra.
- 使用以下代码运行 nodetool Cassandra 用户和密码。
$ nodetool status -u cassandra -pw cassandra







