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

概述

数据库用户的主要用途是连接数据库、访问数据库对象和执行SQL语句。在连接数据库时,必须使用一个已经存在的数据库用户。因此,作为数据库管理员,需要为每一个需要连接数据库的使用者规划一个数据库用户。

为了管理不同的用户权限,MOTService数据库支持三权分立的用户权限管理模式,不同管理权限赋予不同的用户。

数据库默认为非三权分立模式,用户可通过修改MOTService节点的“/srv/BigData/MOTService/data/postgresql.conf”配置文件中“enableSeparationOfDuty”参数,该参数值为“on”表示使用三权分立,值为“off”或未配置表示未使用三权分立模式。

非三权分立权限模型

当MOTService不使用三权分立用户权限管理模式时,数据库用户可以划分为系统管理员、普通用户两种用户,不同用户的对象权限如表1所示。

表1 MOTService用户类型

分类

描述

系统管理员

具有数据库的最高权限,并且具有所有的系统权限和对象权限。

在安装MOTService或者初始化数据库时,会自动生成一个与“-U”参数指定的用户同名的系统管理员。也可以通过CREATE/ALTER USER指定SYSADMIN参数来生成系统管理员。

说明:

基于安全考虑,MOTService已禁止系统管理员使用trust方式远程登录数据库,其他远程方式尚未禁止,因此建议在“pg_hba.conf”文件中对系统管理员配置local方式,以保证数据库访问安全性。

普通用户

默认可以访问MOTService默认的系统表和视图(pg_authid,pg_largeobject,pg_user_status,pg_auth_history除外),可以连接默认的数据库postgres以及使用public模式下的对象(包括表、视图和函数等)。

  • 系统管理员可以在CREATE/ALTER USER时给普通用户指定系统权限。
  • 系统管理员可以通过GRANT语句授予该普通用户某些对象的权限。
  • 系统管理员可以通过GRANT语法将其他角色或用户的权限授权给该普通用户。
表2 默认的用户权限

对象名称

系统管理员

普通用户

表空间

对表空间有创建、删除、访问、分配操作的权限。

对表空间没有创建、删除、分配操作的权限,如果访问表空间需要被赋权。

对所有表有所有的权限。

仅对自己的表有所有的权限,对其他用户的表无权限。

索引

可以在所有的表上建立索引。

可以在自己的表上建立索引。

模式

对所有模式有所有的权限。

对自己的模式有所有的权限,对其他用户的模式无权限。

函数

对所有的函数有所有的权限。

对自己的函数有所有的权限,对其他用户放在public这个公共模式下的函数有调用的权限,对其他用户放在其他模式下的函数无权限。

视图

对所有的视图有所有的权限。

对自己的视图有所有的权限,对其他用户的视图无权限。

三权分立权限模型

当使用三权分立的用户管理模式时,MOTService用户可以划分为四类用户:系统管理员、安全管理员、审计管理员、普通用户。其中系统管理员、安全管理员、审计管理员这三类管理员用户权限彼此分离,并需确保安全管理员和审计管理员不得由一人兼任,各管理员的系统权限如表3所示。

“oid”为10的系统管理员为特殊用户,它具有所有权限,是系统中默认存在,无法新建。可通过如下命令查看:select rolname,oid FROM pg_authid;

表3 三权分立下的管理员权限

管理员名称

是否能创建用户

是否能查看审计日志

是否有系统管理员权限

系统管理员

安全管理员

审计管理员

在三权分立情况下,各管理员的对象权限如表4所示。

表4 三权分立下的对象权限

对象名称

初始用户(“oid”为10)

系统管理员

安全管理员

审计管理员

普通用户

表空间

具有所有权限。

具有对表空间进行创建、删除、访问、分配的权限。

不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。

不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。

不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。

具有所有权限。

对自己的表及其他用户放在public模式下的表有所有权限,对其他用户放在属于各自模式下的表无权限。

对自己的表有所有权限,对其他用户的表无权限。

对自己的表有所有权限,对其他用户的表无权限。

对自己的表有所有权限,对其他用户的表无权限。

索引

具有所有权限。

可以对自己的表及其他用户放在public模式下的表上建立索引。

可以对自己的表上建立索引。

可以对自己的表上建立索引。

可以对自己的表上建立索引。

模式

具有所有权限。

对自己的模式有所有的权限,对其他用户的模式无权限。

对自己的模式有所有的权限,对其他用户的模式无权限。

对自己的模式有所有的权限,对其他用户的模式无权限。

对自己的模式有所有的权限,对其他用户的模式无权限。

函数

具有所有权限。

对自己的及其他用户放在public模式下的函数有所有的权限,对其他用户放在属于各自模式下的函数无权限。

对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。

对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。

对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。

视图

具有所有权限。

对自己的视图及其他用户放在public模式下的视图有所有的权限,对其他用户放在属于各自模式下的视图无权限。

对自己的视图有所有的权限,对其他用户的视图无权限。

对自己的视图有所有的权限,对其他用户的视图无权限。

对自己的视图有所有的权限,对其他用户的视图无权限。