Cassandra 数据库和用户函数

Launchpad蓝图

https://blueprints.launchpad.net/trove/+spec/cassandra-database-user-functions

问题描述

Cassandra 数据存储当前不支持 keyspace * 和用户管理功能。

*

Keyspace 是 Cassandra 中数据的最外层容器,与关系数据库密切对应。

提议的变更

补丁集将为 Cassandra 2.1 2 数据存储实现以下 keyspace 和用户相关功能

用户函数

  • 创建/删除/获取用户

  • 列出用户

  • 更改密码

  • 授予/撤销/列出访问权限

  • 更新属性

Keyspace 函数

  • 创建/删除数据库

  • 列出数据库

配置

Cassandra 将其配置存储在 ‘cassandra.yaml’ 文件中(通常在 ‘/etc/cassandra’ 中)。为了使对配置文件所做的任何更改生效,必须重新启动节点(数据存储服务)。必须更新配置模板以启用身份验证和授权,以便支持数据存储用户和相关功能。特定于客户端的设置(身份验证默认值)存储在 ‘~/.cassandra/cqlshrc’ 中,其中 ‘~’ 是 Trove 用户的家目录。

数据库

公共 API

公共 API 安全

当前实现允许原始匿名连接,因此使数据存储对任何具有连接 URL 的人开放。必须首先更改此设置,因为在这种设置中甚至未启用用户函数。

在 Cassandra 中,只有 SUPERUSERS 才能创建其他用户并授予数据库资源的权限。Trove 使用 ‘cassandra’ 超级用户执行其管理任务。它创建的用户都是 ‘normal’(NOSUPERUSER)帐户。它可以授予的权限也仅限于非超级用户操作。这是为了防止任何人通过 Trove API 创建新的超级用户。 同样,所有列表操作仅包括非超级用户帐户。可更新的属性包括用户名和密码。我们不会在此补丁集中实现启用超级用户帐户。

必须更新数据存储配置模板以启用身份验证和授权支持(原始配置允许匿名连接)。使用的默认实现是

  • authenticator: org.apache.cassandra.auth.PasswordAuthenticator

  • authorizer: org.apache.cassandra.auth.CassandraAuthorizer

需要将超级用户密码从默认的 ‘cassandra’ 更改为随机的 Trove 密码,然后将其存储在 Trove 只读文件中,位于 ‘~/.cassandra/cqlshrc’ 中,该文件也是客户端设置的默认位置。

Python API

无 (合并后添加的空部分)

CLI (python-troveclient)

无 (合并后添加的空部分)

内部 API

Guest Agent

当前实现使用 CQLSH 3 命令行客户端与基础数据库交互。Trove 通过可用的 shell 与 CQLSH 客户端通信,并依赖于解析客户端的输出以确定数据存储的当前状态和上次操作的状态。它还需要 Trove 提供输入,作为已安装客户端接受的格式化(并经过清理)字符串。这不太可移植,并且在将访客代理移植到其他平台时,未来可能会出现许多潜在的兼容性问题。它还完全绕过了 Python 客户端实现的本机异常处理。为了使 guestagent 通过本机 Python API 进行通信并避免未来的可移植性问题,我们使用官方开源 Python Cassandra 驱动程序重新实现通信接口。本机接口将在 CassandraConnection 中实现,并用于利用 Python 异常框架获取数据库状态。

用户相关功能需要启用服务器上的授权和身份验证支持。配置模板将更新以反映此要求(请参阅“公共 API 安全性”部分)。

以下部分详细介绍了 keyspace (“数据库”) 函数。Cassandra 本机支持行复制。它可以将每个行的可配置数量的副本(副本)存储在多个节点上,以确保可靠性和容错能力。所有这些副本都同等重要;没有主副本或主副本。它支持几种复制策略,这些策略确定复制的行如何在整个 Cassandra 集群中分布。集群中行的总副本数称为复制因子。 ‘创建数据库’ 实现将使用 ‘SimpleStrategy’,这是单节点设置中唯一有意义的策略。它是一种非常简单的配置,仅在访客机器上有一个副本(副本),仅适用于最基本的应用程序和演示目的。以下系统 keyspace 将默认排除在数据库操作和列表中,方法是将它们包含在 ‘ignore_dbs’ 列表中:‘system’、‘system_auth’、‘system_traces’

备选方案

实现

负责人

Petr Malik <pmalik@tesora.com>

里程碑

Liberty-1

工作项

  1. 实现基于 native-driver 的 Cassandra 数据存储连接。

  2. 启用服务器上的身份验证和授权。

  3. 实现用户函数 API 调用。

升级影响

所需的 native Python 驱动程序 2.0.x 支持 Cassandra 1.2 及更高版本。

依赖项

Trove 使用官方开源 Python 驱动程序 1 连接到数据库并执行查询。该驱动程序已经存在于 OpenStack 全局需求中。它不必包含在 ‘requirements.txt’ 文件中,但需要将其添加到 ‘test-requirements.txt’ 文件中以启用单元测试。镜像提供程序需要安装它(‘cassandra-driver’)在 Cassandra 镜像中。当前的 Trove 集成镜像将被更新以执行此操作。

测试

将添加单元测试以验证已实现的功能和非平凡的代码路径。

文档影响

数据存储文档应更新以反映启用的功能。