Root 用户禁用

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/trove/+spec/root-disable

由于实例上存在启用 root 用户的功能,因此也应提供禁用 root 用户的功能。

问题描述

目前,可以在实例上启用 root 用户。预计也可以禁用 root 用户。

禁用 root 用户不应改变 `root-show` 命令确定 root 用户是否曾经被启用的能力。

提议的变更

此更改将添加一个新的 `root-disable` 命令。

该命令将从指定的实例中删除 root 用户。执行该命令不会对 `root_enable_history` 表进行任何更改。这确保了 `root-show` 命令将继续按预期运行。

配置

数据库

公共 API

REST API

DELETE /instances/{id}/root

公共 API 安全

Python API

Root 类中的 Python API

def delete(self, instance)

“””实现 root-disable API。

移除指定数据库实例的 root 用户。

param instance

从中移除 root 用户的实例

“””

CLI (python-troveclient)

CLI

trove root-disable <instance>

内部 API

Guest Agent

适当的 root 禁用方法将仅针对 MySQL 添加。所有其他数据存储也需要具有相应的未实现错误。

备选方案

另一种选择是 `root-disable` 将简单地调用 `root-enable` 并且不将密码返回给用户。这种替代方案也不会影响 `root-show`。

但是,操作员可能认为在执行 `root-disable` 调用后,root 用户已完全从数据库中删除。保留 root 用户可能不是操作员所期望的。

讨论总结

在讨论此蓝图期间提出了一些问题。完整的详细信息可以在这里找到 https://review.openstack.org/#/c/189837/

总而言之,这些问题围绕着用户执行 root 启用后可能发生的问题。

  1. 存在一个安全漏洞,用户可以创建一个替代的 root 用户,删除现有的 root 用户并进行备份然后恢复,从而不会留下任何痕迹表明 root 用户已被启用,并且恢复的数据库中留下一个“未知”的替代 root 用户。

  2. 启用的 root 用户可以更改管理用户访问权限,从而使实例处于无法通过 Trove 进行管理的狀態。

确定添加 `root-disable` 命令不会使上述提出的问题比现有情况更糟。

实现

负责人

主要负责人

dloi

里程碑

liberty-1

工作项

  • 实现 CLI、Python API 和 REST API 调用

  • 在 guest 中添加 MySQL 数据库的 `disable_root` 方法以及所有其他数据存储的未实现存根。

  • 单元和集成测试

升级影响

依赖项

测试

添加到现有的 root 启用测试中,以测试禁用 root 用户。

文档影响

需要将新的 `root-disable` 命令添加到 API 文档中。

参考资料