概述
数据库用户的主要用途是连接数据库、访问数据库对象和执行SQL语句。在连接数据库时,必须使用一个已经存在的数据库用户。因此,作为数据库管理员,需要为每一个需要连接数据库的使用者规划一个数据库用户。
为了管理不同的用户权限,MOTService数据库支持三权分立的用户权限管理模式,不同管理权限赋予不同的用户。
数据库默认为非三权分立模式,用户可通过修改MOTService节点的“/srv/BigData/MOTService/data/postgresql.conf”配置文件中“enableSeparationOfDuty”参数,该参数值为“on”表示使用三权分立,值为“off”或未配置表示未使用三权分立模式。
非三权分立权限模型
当MOTService不使用三权分立用户权限管理模式时,数据库用户可以划分为系统管理员、普通用户两种用户,不同用户的对象权限如表1所示。
分类 |
描述 |
---|---|
系统管理员 |
具有数据库的最高权限,并且具有所有的系统权限和对象权限。 在安装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模式下的对象(包括表、视图和函数等)。
|
对象名称 |
系统管理员 |
普通用户 |
---|---|---|
表空间 |
对表空间有创建、删除、访问、分配操作的权限。 |
对表空间没有创建、删除、分配操作的权限,如果访问表空间需要被赋权。 |
表 |
对所有表有所有的权限。 |
仅对自己的表有所有的权限,对其他用户的表无权限。 |
索引 |
可以在所有的表上建立索引。 |
可以在自己的表上建立索引。 |
模式 |
对所有模式有所有的权限。 |
对自己的模式有所有的权限,对其他用户的模式无权限。 |
函数 |
对所有的函数有所有的权限。 |
对自己的函数有所有的权限,对其他用户放在public这个公共模式下的函数有调用的权限,对其他用户放在其他模式下的函数无权限。 |
视图 |
对所有的视图有所有的权限。 |
对自己的视图有所有的权限,对其他用户的视图无权限。 |
三权分立权限模型
当使用三权分立的用户管理模式时,MOTService用户可以划分为四类用户:系统管理员、安全管理员、审计管理员、普通用户。其中系统管理员、安全管理员、审计管理员这三类管理员用户权限彼此分离,并需确保安全管理员和审计管理员不得由一人兼任,各管理员的系统权限如表3所示。
“oid”为10的系统管理员为特殊用户,它具有所有权限,是系统中默认存在,无法新建。可通过如下命令查看:select rolname,oid FROM pg_authid;
在三权分立情况下,各管理员的对象权限如表4所示。
对象名称 |
初始用户(“oid”为10) |
系统管理员 |
安全管理员 |
审计管理员 |
普通用户 |
---|---|---|---|---|---|
表空间 |
具有所有权限。 |
具有对表空间进行创建、删除、访问、分配的权限。 |
不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。 |
不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。 |
不具有对表空间进行创建、删除、分配的权限,访问需要被赋权。 |
表 |
具有所有权限。 |
对自己的表及其他用户放在public模式下的表有所有权限,对其他用户放在属于各自模式下的表无权限。 |
对自己的表有所有权限,对其他用户的表无权限。 |
对自己的表有所有权限,对其他用户的表无权限。 |
对自己的表有所有权限,对其他用户的表无权限。 |
索引 |
具有所有权限。 |
可以对自己的表及其他用户放在public模式下的表上建立索引。 |
可以对自己的表上建立索引。 |
可以对自己的表上建立索引。 |
可以对自己的表上建立索引。 |
模式 |
具有所有权限。 |
对自己的模式有所有的权限,对其他用户的模式无权限。 |
对自己的模式有所有的权限,对其他用户的模式无权限。 |
对自己的模式有所有的权限,对其他用户的模式无权限。 |
对自己的模式有所有的权限,对其他用户的模式无权限。 |
函数 |
具有所有权限。 |
对自己的及其他用户放在public模式下的函数有所有的权限,对其他用户放在属于各自模式下的函数无权限。 |
对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。 |
对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。 |
对自己的函数有所有的权限,对其他用户放在public模式下的函数有调用的权限,对其他用户放在属于各自模式下的函数无权限。 |
视图 |
具有所有权限。 |
对自己的视图及其他用户放在public模式下的视图有所有的权限,对其他用户放在属于各自模式下的视图无权限。 |
对自己的视图有所有的权限,对其他用户的视图无权限。 |
对自己的视图有所有的权限,对其他用户的视图无权限。 |
对自己的视图有所有的权限,对其他用户的视图无权限。 |