在本文中,我们将讨论如何保护 Cassandra 集群,它涉及身份验证、授权等任务,让我们一一讨论。
- 有四个概念来保护 Cassandra 授权、身份验证、加密、防火墙。
-
验证:
在此,我们将检查我们如何允许应用程序和用户登录集群。 - 授权:
在此,我们处理授予权限,以便用户想要创建、读取和写入数据等以访问数据库或数据库对象,例如表和物化视图。 - 加密:
在此,我们指的是使用安全套接字层 (SSL),它是保护客户端和 Cassandra 数据库之间以及集群节点之间通信的安全层。 - 防火墙:
在此,我们管理防火墙端口,使 9042 成为用于 Cassandra(客户端)访问的客户端端口,这涉及了解您必须保持打开哪些端口。
现在,我们将使用具有管理员权限的 cqlsh。 Cassandra 自带角色Cassandra,密码也是Cassandra。用于访问内置角色的 cqlsh 查询如下。
cqlsh 127.0.0.1 -u cassandra -p cassandra
输出:
现在,如果我们尝试创建一个新角色、更改角色、删除角色等,我们会收到以下错误,例如
InvalidRequest: Error from server:
code=2200 [Invalid query]message="org.apache.cassandra.auth.CassandraRoleManager
doesn't support PASSWORD.
配置身份验证:
所有授权和身份验证都是通过数据库角色进行的。请改用 CREATE ROLE、ALTER ROLE、DROP ROLE、LIST ROLES 和 LIST_PERMISSIONS 命令。
要解决以下错误,请更改 cassandra.yaml 文件中的默认身份验证值。
//default value
#authenticator: AllowAllAuthenticator
// set the authenticator value
authenticator: org.apache.cassandra.auth.PasswordAuthenticator
//default value
#authorizer: AllowAllAuthorizer
//set the authorizer value
authorizer: org.apache.cassandra.auth.CassandraAuthorizer
在 Cassandra.yaml 文件中进行任何更改后,保存该文件,然后重新启动数据库并使用默认超级用户 Cassandra 的凭据再次登录到 cqlsh。
cqlsh -u cassandra -p cassandra
现在,我们将创建一个新角色、列表角色、删除角色等。
创建一个新角色:
要创建新角色,请使用以下 CQL 查询。
cassandra@cqlsh> create user 'User' with password 'User';
我们可以使用“list roles”命令查看以下查询的输出。
输出:
在 Cassandra 中,默认情况下,CREATE ROLE 语句中的 LOGIN 属性值为 False。创建登录角色时,必须将此属性设置为 True。我们可以通过查询 system_auth.roles表来查看数据库中的角色,如下所示:
//system_auth.roles: Stores roles and role members.
select * from system_auth.roles;
输出:
角色权限:
通过使用角色权限cql查询,我们可以检查角色对特定数据库的创建、读取、删除等数据操作的权限,以及超级用户创建的角色。
cassandra@cqlsh> select * from system_auth.role_permissions;
输出: