本文为您介绍基于实时数仓Hologres的简单权限模型。

背景

Hologres兼容Postgres,使用与Postgres完全一致的权限系统(简称专家模式,详情请参见专家权限模型)。典型的Postgres权限系统划分非常严格,在实际业务场景中使用时,操作较为复杂,通常存在如下痛点:
  • 如果您想要给某个用户授权,需要执行大量的授权语句。
  • 不同的角色有不同的权限,在操作上非常繁琐,有时也会出现某条授权语句遗漏导致某个权限缺失的情况。
  • 每新增一个用户就需要执行相同的批量授权语句,浪费大量时间。
  • 尽管我们提供了Postgres的标准授权语句作为参考,但当使用习惯不同时,面对不同的权限,常常难以准确执行正确的授权语句,在权限管理方面容易混乱。这在一定程度上也会给业务带来安全风险,同时也加大了您的管理成本、时间成本和使用成本。

为解决以上业务痛点,Hologres在PostgreSQL权限的基础上,提供了一种粗粒度的简单权限模型(Simple Permission Model,SPM)。简单权限模型以DB作为维度,划分admin(管理员)、developer(开发者)、writer(读写者)以及viewer(分析师)四种角色,您可以通过少量的权限管理函数,即可对DB中的对象进行方便且安全的权限管理。

简单权限模型介绍

在简单权限模型中,每个DB有如下几种权限等级:
  • DB管理员:{db}_admin
  • 开发者:{db}_developer
  • 读写者:{db}_writer
  • 分析师:{db}_viewer

每个角色对应的权限如下表所示。

角色 权限
{db}_admin
  • 某个DB的管理员(admin)。
  • {db}_admin组的权限是{db}_developer、{db}_writer和{db}_viewer组权限的合集。
  • 某个DB的owner,可以删除DB。
  • 可管理当前DB的{db}_admin、{db}_developer、{db}_writer和{db}_viewer四个用户组的成员,包括新增及移除用户组成员。
  • 可以创建用户,并将用户加入某个用户组。
  • 可以在该DB创建对象,例如Schema,并可以对对象进行增删改查。
  • 可以在DB级别修改DB的配置项。
{db}_developer
  • DB的开发者(developer)。
  • {db}_developer组的权限是{db}_writer和{db}_viewer组权限的合集。
  • 该DB所有Schema中,除系统对象以外的所有表、外表、类表对象(如视图等)、Function、Procedure、Foreign Server、FDW、Type及Language的owner,可以增删查改所有Schema中的所有表。
  • 所有Schema的USAGE及CREATE权限,可以在任意非系统的Schema中进行创建表,创建视图及创建外表等DDL操作。
{db}_writer
  • DB下的读写者(writer)。
  • {db}_writer组的权限是{db}_viewer权限的合集。
  • Schema中所有表、外表及类表对象(如视图等)的数据,即拥有SELECT、INSERT、UPDATE及DELETE等权限。
  • 可以增删查改所有Schema。
  • 可以访问或使用developer所拥有的Function、Procedure、Foreign Server、FDW、Type及Language等对象。
  • 所有Schema的USAGE权限,不可进行DDL操作。
{db}_viewer
  • DB的分析师(viewer)。
  • 可以读取所有schema下所有表、外表及类表对象(如视图等)的数据,即拥有SELECT权限。
  • 可以访问或使用developer所拥有的Function、Procedure、Foreign Server、FDW、Type及Language等对象。
  • 所有Schema的USAGE权限。