更新时间:2024-11-29 GMT+08:00

用户和角色概述

一个数据库可能有多个用户访问,为了方便管理这些用户,可将用户管理成一个数据库角色,一个数据库角色可以视为一个数据库用户,或者一组数据库用户。

背景信息

对于MOTService来说,用户和角色是基本相同的概念,不同之处在于,使用CREATE ROLE创建用户,不会创建同名的SCHEMA,并且默认没有LOGIN权限。换句话说,一个拥有LOGIN权限的角色可以被认为是一个用户。在业务设计中,仅建议通过ROLE来组织权限,而不是用来访问数据库。

数据库角色和权限

权限和角色可以控制用户访问指定的数据,以及执行指定类型的SQL语句。详细信息请参见表1

系统权限只能通过在CREATE/ALTER USER、CREATE/ALTER ROLE语句指定(其中SYSADMIN还可以通过grant/revoke all privileges的方式赋予、回收),无法从角色继承。

表1 MOTService权限类型

分类

描述

系统权限

系统权限又称为用户属性,可以在创建用户和修改用户时指定,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。

系统权限一般通过CREATE/ALTER USER语句指定。除了SYSADMIN外的其他系统权限,无法通过GRANT/REVOKE进行授予和撤销。并且,系统权限无法通过ROLE被继承。

对象权限

对象权限是指在表、视图、索引和函数等数据库对象上执行各种操作的权限,对象权限包括SELECT、INSERT、UPDATE和DELETE等。

只有对象的所有者或者系统管理员才可以执行GRANT/REVOKE语句来分配/撤销对象权限。

角色

角色是一组权限的集合,可以将一个角色的权限赋予其他角色和用户。

由于无法给其他角色和用户赋予系统权限,所以角色只有是对象权限的集合时才有意义。

创建用户操作步骤

  1. 登录FusionInsight Manager,选择“集群 > 服务 > MOTService > 实例”,查看并记录“MOTServer(主)”实例的业务IP。
  2. omm用户身份登录MOTService主节点,执行如下命令启动环境变量。

    source ${MOTSERVER_HOME}/.motservice_profile

  3. 以连接默认postgres为例,端口号是20105,输入MOTService数据库omm用户密码:

    gsql -d postgres -p 20105

    MOTService数据库的omm密码请联系系统管理员获取。

  4. 规划用户。

    从安全性考虑,建议在安装MOTService数据库后,分别规划具备表2所示权限的用户。

    表2 用户的规划原则及创建方法

    用户类型

    说明

    创建方法

    系统管理员

    具有SYSADMIN权限的用户。

    规划原则:在安装数据库或者初始化数据库时,会自动生成一个与-U参数指定的用户同名的系统管理员。不建议再创建其他系统管理员。

    这三类用户创建方式类似,以创建审计管理员user_audit为例,命令格式如下:

    CREATE USER user_audit WITH AUDITADMIN IDENTIFIED BY "user_audit_password";

    安全管理员

    具有CREATEROLE权限的用户。

    规划原则:建议只建立一个仅具有CREATEROLE权限的安全管理员。

    审计管理员

    具有AUDITADMIN权限的用户。

    规划原则:建议只建立一个仅具有AUDITADMIN权限的审计管理员。

    对象操作员

    最小权限用户,可以连接MOTService默认的数据库postgres,并访问其中默认的系统表和视图的用户。

    规划原则:首先创建角色,再将用户加入此角色,则用户具有角色的对象权限。

    以创建角色role1具有表“films”的查询权限,再创建用户user_read加入角色role1,拥有相同对象权限为例:

    1. 创建角色role1

      CREATE ROLE role1 IDENTIFIED BY "role1_password";

    2. 为角色role1添加对表“films”的查询权限。

      GRANT SELECT ON TABLE films TO role1;

    3. 创建对象操作员user_read并加入角色role1中。

      CREATE USER user_read IN ROLE role1 PASSWORD "user_read_password";