概述
MogDB/openGauss是基于PostgreSQL开发的,对象角色这部分数据库对象在兼容PG的基础上,又做了一些功能增强,本章内容做一个关于用户角色在两类数据库之间的对比。
MogDB/openGauss 用户 and PostgreSQL 用户
PostgreSQL14 | MogDB3.0.0 | |
---|---|---|
用户与角色关系 | 用户是角色别名 | 同 PG |
用户属性 | 共13个 | 共25个 |
内置角色 | 共8个 | 共8个 |
系统表/视图 | pg_roles pg_user pg_authid pg_auth_members |
同 PG |
角色管理 | create/drop/alter user/role … | 同 PG |
添加/删除角色成员 | grant rolegroup to user; revoke rolegroup from user; |
同 PG |
角色继承 | 具有inherit属性成员拥有组角色的所有权限 | 同 PG |
角色切换 | SET ROLE role_name SET ROLE NONE RESET ROLE |
SET ROLE role_name PASSWORD ‘password’; RESET ROLE; |
用户安全策略 | - | 自身参数控制 |
密码安全策略 | passwordcheck 扩展 | 自身参数控制 |
三权分立功能 | - | 系统管理员、安全管理员、审计管理员 |
初始化用户 | 超级管理员用户 | 非三权分立:超管; 三权分立:不具有CREATEROLE和AUDITADMIN权限 |
私有用户 | - | 系统管理员无法访问私有用户对象的数据 |
默认角色组 | PUBLIC | PUBLIC |
同名schema | - | 随用户创建 |
public 模式 | 默认有usage和creat权限 | 需要手工赋权 |
用户属性
用户属性只能通过create/alter user/role的方式添加或修改,不支持grant/revoke。
PG
SUPERUSER | NOSUPERUSER --超管
CREATEDB | NOCREATEDB --创建DB
CREATEROLE | NOCREATEROLE --创建用户
INHERIT | NOINHERIT --权限继承
LOGIN | NOLOGIN --登录
REPLICATION | NOREPLICATION --复制
BYPASSRLS | NOBYPASSRLS --行级访问
CONNECTION LIMIT --连接数限制
PASSWORD --密码
VALID UNTIL --角色失效时间
IN ROLE --属于哪个角色组
ROLE --包含哪些成员角色
ADMIN --同role,但具有WITH ADMIN OPTION
MogDB/openGauss
SYSADMIN | NOSYSADMIN --系统管理员
MONADMIN | NOMONADMIN --监控管理员
OPRADMIN | NOOPRADMIN --运维管理员
POLADMIN | NOPOLADMIN --策略管理员
AUDITADMIN | NOAUDITADMIN --审计管理员
CREATEDB | NOCREATEDB --创建DB
CREATEROLE | NOCREATEROLE --创建用户
INHERIT | NOINHERIT --权限继承
LOGIN | NOLOGIN --登录
REPLICATION | NOREPLICATION --复制
BYPASSRLS | NOBYPASSRLS --行级访问
CONNECTION LIMIT --连接数限制
PASSWORD --密码
INDEPENDENT | NOINDEPENDENT --私有用户
PERSISTENCE | NOPERSISTENCE --永久用户
DISABLE --禁用密码,只能通过外部认证来连接数据库,例如:kerberos认证
EXPIRED --创建密码失效用户
VALID BEGIN --角色生效时间
VALID UNTIL --角色失效时间
RESOURCE POOL --角色使用的resource pool名称,该名称属于系统表:pg_resource_pool
PERM SPACE --用户使用空间的大小
TEMP SPACE --用户临时表存储空间限额
SPILL SPACE --用户算子落盘空间限额
IN ROLE --属于哪个角色组
ROLE --包含哪些成员角色
ADMIN --同role,但具有WITH ADMIN OPTION
内置角色
PG
角色 | 允许的访问 |
---|---|
pg_read_all_settings | 读取所有配置变量,甚至是那些通常只对超级用户可见的变量。 |
pg_read_all_stats | 读取所有的pg_stat_*视图并且使用与扩展相关的各种统计信息,甚至是那些通常只对超级用户可见的信息。 |
pg_stat_scan_tables | 执行可能会在表上取得ACCESS SHARE锁的监控函数(可能会持锁很长时间)。 |
pg_monitor | 读取/执行各种不同的监控视图和函数。 这角色是pg_read_all_settings,pg_read_all_stats和pg_stat_scan_tables的成员。 |
pg_signal_backend | 发信号到其他后端以取消查询或中止它的会话。 |
pg_read_server_files | 允许使用COPY以及其他文件访问函数从服务器上该数据库可访问的任意位置读取文件。 |
pg_write_server_files | 允许使用COPY以及其他文件访问函数在服务器上该数据库可访问的任意位置中写入文件。 |
pg_execute_server_program | 允许用运行该数据库的用户执行数据库服务器上的程序来配合COPY和其他允许执行服务器端程序的函数。 |
- pg_monitor、pg_read_all_settings、pg_read_all_stats和pg_stat_scan_tables角色的目的是允许管理员能为监控数据库服务器的目的很容易地配置角色。
- pg_signal_backend角色想要允许管理员启用受信任的、但是非超级用户的、发送信号给其他后端的角色。
- pg_read_server_files、pg_write_server_files以及pg_execute_server_program角色的目的是允许管理员有一些可信但不是超级用户的角色来访问文件以及以运行数据库的用户在数据库服务器上运行程序。
MogDB/openGauss
角色 | 权限描述 |
---|---|
gs_role_copy_files具 | 有执行copy … to/from filename 的权限,但需要先打开GUC参数enable_copy_server_files。 |
gs_role_signal_backend | 具有调用函数pg_cancel_backend、pg_terminate_backend和pg_terminate_session来取消或终止其他会话的权限,但不能操作属于初始用户和PERSISTENCE用户的会话。 |
gs_role_tablespace | 具有创建表空间(tablespace)的权限。 |
gs_role_replication | 具有调用逻辑复制相关函数的权限,例如kill_snapshot、pg_create_logical_replication_slot、pg_create_physical_replication_slot、pg_drop_replication_slot、pg_replication_slot_advance、pg_create_physical_replication_slot_extern、pg_logical_slot_get_changes、pg_logical_slot_peek_changes、pg_logical_slot_get_binary_changes、pg_logical_slot_peek_binary_changes。 |
gs_role_account_lock | 具有加解锁用户的权限,但不能加解锁初始用户和PERSISTENCE用户。 |
gs_role_pldebugger | 具有执行dbe_pldebugger下调试函数的权限。 |
gs_role_directory_create | 具有执行创建directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 |
gs_role_directory_drop | 具有执行删除directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 |
关于内置角色的管理有如下约束:
- 以gs_role_开头的角色名作为数据库的内置角色保留名,禁止新建以gs_role_开头的用户/角色,也禁止将已有的用户/角色重命名为以gs_role_开头;
- 禁止对内置角色的ALTER和DROP操作;
- 内置角色默认没有LOGIN权限,不设预置密码;
- gsql元命令\du和**\dg**不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示。
- 三权分立关闭时,初始用户、具有SYSADMIN权限的用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。三权分立打开时,初始用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。