暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MogDB/openGauss 数据库中user/role 使用

原创 高云龙 云和恩墨 2022-06-14
1256

MogDB/openGauss 数据库中关于用户角色这部分有一个大家熟知的特性:三权分立,即从安全性考虑将系统管理的权限分离出安全管理员和审计管理员,这里暂时先不考虑三权分立这个特性,仅从user/role 开发运维层面进行整理。

MogDB数据库版本:3.0.0

定义

角色是拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。
从创建用户和角色的语义(create user/role)上看也没有区别,唯一的区别就是用户默认带有login权限。官方文档里也明确的指出 image.png

查询用户相关信息可以查看视图pg_user,查看角色相关信息可以查看pg_roles,但如果你查看pg_user和pg_roles的视图定义,会发现这两个视图都来源于基表pg_authid。

我们可以认为在MogDB/openGauss里,用户就是带有login属性的角色。

角色管理

私有用户

角色的属性有很多,可以通过\h create user/role来查看,也可以直接在pg_authid系统表中查看。
这里主要介绍一个比较重要的属性:INDEPENDENT,即在非三权分立模式下,创建具有INDEPENDENT属性的私有用户,
针对该私有用户的对象,系统管理员和拥有CREATEROLE属性的安全管理员在未经其授权前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行INSERT、DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER操作。

--创建私有用户,不会立即创建同名schema,在创建对象的时候会创建
MogDB=# create user inu independent password 'inu@1234';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
WARNING:  Please carefully use independent user as it need more self-management.
HINT:  Self-management include logical backup, password manage and so on.
CREATE ROLE

MogDB=# select * from information_schema.schemata where schema_name='inu';
 catalog_name | schema_name | schema_owner | default_character_set_catalog | default_character_set_schema | default_character_set_name | sql_path
--------------+-------------+--------------+-------------------------------+------------------------------+----------------------------+----------
(0 rows)
MogDB=# \c postgres inu
Password for user inu:
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "inu".
MogDB=> create table it(id int);
CREATE TABLE
MogDB=> select * from information_schema.schemata where schema_name='inu';
 catalog_name | schema_name | schema_owner | default_character_set_catalog | default_character_set_schema | default_character_set_name | sql_path
--------------+-------------+--------------+-------------------------------+------------------------------+----------------------------+----------
 postgres     | inu         | inu          |                               |                              |                            |
(1 row)


--超级管理员用户无法取消independent属性,只有私有用户自己有权限
MogDB=# alter user inu noindependent;
ERROR:  Only user himself can remove his own independent attribute.

MogDB=# \c postgres inu
Password for user inu:
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "inu".
MogDB=> alter user inu noindependent;
ALTER ROLE

--超级管理员无法访问私有用户对象数据
MogDB=> insert into it values(1);
INSERT 0 1
MogDB=> select * from it;
 id
----
  1
(1 row)

MogDB=> \c postgres omm
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "omm".
MogDB=# select * from inu.it;
ERROR:  permission denied for relation it
DETAIL:  N/A

角色权限继承

在角色级别授予或撤消权限时,这些更改将作用到角色下的所有成员。删除角色时只删除角色本身,不会删除角色中的成员用户。

MogDB提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限, 可通过在GRANT和REVOKE指定关键字PUBLIC实现。

添加/移除角色成员

--添加角色
grant role to user;
--删除角色
revoke role from user;

账号安全策略

失败登录次数:failed_login_attempts=10
密码锁定时间:password_lock_time=1(d)
手工锁定:ALTER USER name ACCOUNT LOCK;
手工解锁:ALTER USER name ACCOUNT unlock;

密码安全策略

密码加密方式:password_encryption_type=1
是否开启密码策略:password_policy=1
密码重用时间:password_reuse_time
密码重用次数:password_reuse_max
密码有效期:password_effect_time
密码到期提醒:password_notify_time

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论