📜  保护 Cassandra

📅  最后修改于: 2021-09-10 02:10:29             🧑  作者: Mango

在本文中,我们将讨论如何保护 Cassandra 集群,它涉及身份验证、授权等任务,让我们一一讨论。

    有四个概念来保护 Cassandra 授权、身份验证、加密、防火墙。
  1. 验证:
    在此,我们将检查我们如何允许应用程序和用户登录集群。

  2. 授权:
    在此,我们处理授予权限,以便用户想要创建、读取和写入数据等以访问数据库或数据库对象,例如表和物化视图。
  3. 加密:
    在此,我们指的是使用安全套接字层 (SSL),它是保护客户端和 Cassandra 数据库之间以及集群节点之间通信的安全层。
  4. 防火墙:
    在此,我们管理防火墙端口,使 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; 

输出: