hubble中的授权

通常,授权是控制谁(用户、角色)可以对哪些资源或目标(数据库、函数、表、集群、模式、行)执行哪些操作(例如读取、写入、更新、删除、授予等)、用户、工作等)。

用户和角色

在hubble中,角色或用户之间没有技术上的区别。角色或者用户支持以下操作:

  • 被允许登录到SQL shell。
  • 被授予对特定操作和数据库对象的特权。
  • 成为其他用户、角色的成员,继承他们的特权。
  • 让其他用户、角色作为继承其特权的成员。
  • 配置其他角色选项。

SQL语句CREATE USERCREATE ROLE将创建相同的实体,在整个文档中,我们将根据实体的预期目的来引用“用户”或“角色”。

SQL用户

SQL用户可以使用内置的SQL shell或通过应用程序与hubble数据库进行交互。

创建和管理用户

使用CREATE USERDROP USER语句创建和删除用户,使用ALTER USER语句添加或更改用户的密码和角色选项,使用GRANTREVOKE语句管理用户权限,使用SHOW USERS语句列出用户。

必须为新用户授予该用户需要访问的每个数据库和表所需的权限。

默认情况下,新用户属于该public角色,除了分配给该public角色的权限外,没有其他权限。

root用户

默认情况下root为每个集群创建用户。root用户被分配给admin角色并拥有整个集群的所有权限。

对于安全集群,除了为用户生成客户端证书外,还可以使用语句root为用户分配或更改密码。

角色

角色是一组用户和或其他角色,可以将其作为一个整体授予或撤销权限。要简化访问管理,请创建一个角色并向该角色授予权限,然后创建 SQL用户并向他们授予该角色的成员资格。

默认角色

  • admin角色

admin角色是默认创建的,不能删除。属于该admin角色的用户拥有集群中所有数据库对象的所有权限。root用户默认属于该角色。

admin用户是admin角色的成员。只有admin用户可以使用CREATE ROLEDROP ROLE

将用户分配给admin角色:

GRANT admin TO <username>;
  • public角色

默认情况下,所有新用户和角色都属于该public角色。您可以授予和撤销public角色的权限。

术语

角色管理员

Role admin是一个角色选项,允许给定的用户或角色通过授予和撤销其他用户和角色来管理自己。

要创建admin角色,请使用WITH ADMIN OPTION语句。

grant admin to username with admin option;

对象所有权

所有hubble对象(例如数据库、表、模式和类型)都必须有所有者。创建该对象的用户是该对象的默认所有者,并且对该对象具有ALL特权。同样,作为所有者角色成员的任何角色也拥有对象的所有特权。

权限

当用户通过内置 SQL客户端或客户端驱动程序连接到数据库时,hubble会检查用户和角色对每个执行语句的权限。如果用户没有足够的权限执行语句,hubble会报错。

支持的权限

角色和用户可以被授予以下权限:

权限形式
ALL数据库、模式、表、类型
CREATE数据库、模式、表
DROP数据库、表
GRANT数据库、模式、表、类型
CONNECT数据库
SELECT
INSERT
DELETE
UPDATE

默认权限

默认情况下,hubble授予当前角色、用户对他们创建的对象的所有权限。

要查看一个角色或一组角色的默认权限,请使用该SHOW DEFAULT PRIVILEGES语句。

要更改用户创建的对象的默认权限,请使用该ALTER DEFAULT PRIVILEGES语句。

管理权限

使用GRANTEVOKE语句来管理用户和角色的权限。

在向角色和用户授予权限时,请考虑以下几点:

  • 当角色或用户被授予数据库权限时,该角色或用户不会自动被授予访问该数据库中任何新对象或现有对象的权限。要更改对这些对象的访问权限,请参阅默认权限。
  • 当角色或用户被授予表的权限时,权限仅限于该表。
  • 在hubble中,权限是在数据库和表级别授予用户和角色的。它们尚不支持其他粒度,例如列或行。
  • root用户自动属于该角色admin并拥有新数据库的权限。
  • 具体语句需要的权限,参见相应SQL语句的文档。

角色选项

授权用户是否可以执行以下操作:

  • 查看或取消其他角色拥有的正在进行的查询和会话。
  • 暂停、恢复和取消作业。
  • 创建或重命名数据库。
  • 管理其他用户的身份验证。
  • 修改集群设置。
  • 创建变更源。

授权最佳实践

我们推荐以下最佳实践来为集群设置访问控制:

  • 仅将该root用户用于数据库管理任务,例如创建和管理其他用户、创建和管理角色以及创建和管理数据库。不要将root用户用于应用程序;相反,根据应用程序的访问要求创建具有特定权限的用户或角色。
  • 在设计特权授予系统时,将最小特权原则用作法则。