一、默认权限机制
二、管理员
1、核心管理员
2、辅助管理员
三、三权分立
1、思想
2、实践
四、权限操作
1、用户的创建与删除
2、用户的修改与信息查看
五、角色
1、创建、修改和删除角色
六、GRANT
七、REVOKE
八、设置用户安全策略
自动锁定和解锁用户
手动锁定和解锁用户
设置帐号有效期
设置密码安全策略
数据库中默认的三个管理员及权限:
三个管理员并非唯一的,可以按需创建。以系统管理为例可以创建新的系统管理员,或将权限授予现有用户:
openGauss=# ALTER USER sysadmin SYSADMIN;
授予现有用户:
openGauss=# CREATE USER sysadmin WITH SYSADMIN password "xxxxxxxxx";
数据库中默认的三个辅助管理员及权限:
辅助管理员也并非唯一的,可以按需创建。以监控管理员为例可以创建新的监控管理员,或将权限授予现有用户:
openGauss=# CREATE USER monadmin WITH MONADMIN password "xxxxxxxxx";
授予现有用户
openGauss=# ALTER USER monadmin MONADMIN;
默认规则下系统管理员继承了初始用户绝大部分权限,拥有的权限过高。为了避免权限过于集中带来的风险,建议对安全有较高要求的用户开启三权分立,又叫三员分立:
减少系统管理员的权限
与安全管理员、安全审计员相互制约。
三员相互独立、配合管理。
系统管理员取消CREATEROLE权限和AUDITADMIN权限
CREATEROLE授予安全管理员
AUDITADMIN授予审计管理员
开启三权分立:将参数enableSeparationOfDuty设置为on
创建用户joe,并设置用户拥有CREATEDB属性
openGauss=# CREATE USER joe WITH CREATEDB PASSWORD "xxxxxxxxx";
CREATE ROLE
删除用户,同时会删除同名的schema。语法格式
DROP USER [ IF EXISTS ] user_name [, ...] [ CASCADE | RESTRICT ];
CASCADE:级联删除依赖用户的对象。
RESTRICT:如果用户还有任何依赖的对象,则拒绝删除该用户(缺省行为)
修改角色的权限
ALTER USER user_name [ [ WITH ] option [ ... ] ];
修改用户名
ALTER USER user_name RENAME TO new_name;
修改与用户关联的指定会话参数值
ALTER USER user_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT };
重置与用户关联的指定会话参数值
ALTER USER user_name RESET { configuration_parameter | ALL };
ALTER USER中修改的会话参数只针对指定的用户,且在下一次会话中有效。
要查看用户列表,请查询视图PG_USER:
openGauss=# SELECT * FROM pg_user;
角色是一组用户的集合。通过GRANT把角色授予用户后,用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。例如,可以为设计、开发和维护人员创建不同的角色,将角色GRANT给用户后,再向每个角色中的用户授予其工作所需数据的差异权限。在角色级别授予或撤消权限时,这些更改将作用到角色下的所有成员。
openGauss提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。关于PUBLIC默认拥有的权限请参考GRANT。要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字PUBLIC实现。
要查看所有角色,请查询系统表PG_ROLES:
openGauss=# SELECT * FROM PG_ROLES;
非三权分立时,只有系统管理员和具有CREATEROLE属性的用户才能创建、修改或删除角色。三权分立下,只有初始用户和具有CREATEROLE属性的用户才能创建、修改或删除角色。
要创建角色,请使用CREATE ROLE。
要在现有角色中添加或删除用户,请使用ALTER ROLE。
要删除角色,请使用DROP ROLE。DROP ROLE只会删除角色,并不会删除角色中的成员用户用户。
使用GRANT命令进行用户授权包括以下三种场景:
系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。
将数据库对象(表和视图、指定字段、数据库、函数、模式、表空间等)的相关权限授予特定角色或用户;
将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。
创建名为mvsuser的用户,并将sysadmin权限授权给他
openGauss=# CREATE USER mvsuser PASSWORD ’ password#123';
openGauss=# GRANT ALL PRIVILEGES TO mvsuser;
授权成功后,用户mvsuseer会拥有sysadmin的所有权限。
REVOKE用于撤销一个或多个角色的权限。
非对象所有者试图在对象上REVOKE权限,命令按照以下规则执行:
openGauss为用户提供了自动锁定和解锁用户、手动锁定和解锁异常用户和删除不再使用的用户等一系列的安全措施,保证数据安全。
为了保证用户安全,如果用户输入密码次数超过一定次数(failed_login_attempts),系统将自动锁定该用户,默认值5。次数设置越小越安全,但是在使用过程中会带来不便。
当用户被锁定时间超过设定值(password_lock_time),则当前用户自动解锁,默认值为1天。时间设置越长越安全,但是在使用过程中会带来不便。
若管理员发现某用户被盗、非法访问等异常情况,可手动锁定该用户。
当管理员认为用户恢复正常后,可手动解锁该用户。
创建新用户时,需要限制用户的操作期限(有效开始时间和有效结束时间)。
不在有效操作期内的用户需要重新设定帐号的有效操作期。
用户密码存储在系统表pg_authid中,为防止用户密码泄露,openGauss对用户密码进行加密存储,所采用的加密算法由配置参数password_encryption_type决定。
当参数password_encryption_type设置为0时,表示采用md5方式对密码加密。md5为不安全的加密算法,不建议使用。
当参数password_encryption_type设置为1时,表示采用sha256和md5方式对密码加密,为默认配置。
当参数password_encryption_type设置为2时,表示采用sha256方式对密码加密。