对 Cassandra 的 ‘root’ 操作的支持

在 Cassandra 客体代理中实现 root 启用(带密码)/禁用和显示调用。同时包含与数据存储无关的场景测试,用于 root 操作。

Launchpad 蓝图: https://blueprints.launchpad.net/trove/+spec/cassandra-root-enable

问题描述

在继续进行 Cassandra 客体添加用户/数据库支持的工作1 之后,我们还应该启用 Trove 用户创建超级用户帐户的功能。

提议的变更

Cassandra 的超级用户名为 ‘cassandra’。它随任何新的 Cassandra 安装一起提供,但可以被删除。

在 Cassandra 中,只有超级用户才能创建其他用户并授予数据库资源的权限。Trove 使用 ‘os_admin’ 超级用户执行其管理任务。1 它创建的用户都是 ‘normal’ (NOSUPERUSER) 帐户。

内置的 ‘cassandra’ 超级用户会在准备阶段被主动移除,因为它不需要。

在正常操作期间(未启用 ‘root’),系统中应该只有一个超级用户(os_admin)。因此,‘root’ 默认情况下是启用的。

配置

数据库

公共 API

公共 API 安全

Python API

CLI (python-troveclient)

内部 API

Guest Agent

‘enable’ 操作将通过创建一个新的超级用户(‘cassandra’)并授予其对所有 keyspace 的完全访问权限来实现。用户名(‘cassandra’)和密码(用户提供或随机生成)将返回给客户端。

此后,系统中将存在多个超级用户帐户,并且 ‘root’ 将因此被报告为 ‘enabled’。

‘disable’ 操作仅仅是将用户的密码重置为新的随机字符串,而不将其暴露给最终用户。帐户本身不会被删除,因此 root-show 将继续报告 root 为 ‘enabled’,正如它应该的那样。

在恢复备份时,将检查是否存在除 ‘os_admin’ 之外的其他超级用户,如果存在,则新实例的 root 状态将被报告为 ‘enabled’。

请注意,超级用户无法删除其超级权限或删除自身。因此,不应该可以通过创建新的超级用户、删除旧的超级用户并将状态恢复到新实例来绕过 root 检查。

一旦获得对数据库的超级用户访问权限,最终用户当然可以更改/删除 ‘os_admin’,但这样做将导致实例无法从 Trove 进行管理。

备选方案

Dashboard 影响 (UX)

实现

负责人

主要负责人

Petr Malik <pmalik@tesora.com>

里程碑

Mitaka

工作项

  • 在 Cassandra 管理器中实现与 root 相关的调用。

  • 添加与数据存储无关的场景测试,以测试新功能。

升级影响

依赖项

此实现很大程度上依赖于蓝图 cassandra-database-user-functions 的工作1

测试

  • 将根据需要添加管理器单元测试。

  • 将实现与数据存储无关的场景测试,以测试相关功能。

文档影响

为 Cassandra 数据存储记录新启用的功能。

参考资料

1(1,2,3)

Cassandra 用户/数据库实现审查: https://review.openstack.org/#/c/206739/

附录