账号权限

本文介绍了高权限账号和普通账号对应的权限。

简介

为了保证云数据库的安全性,需要对用户的权限进行管理和限制。用户的权限应该仅限于其需要的操作,而不应该有任何超出权限范围的操作。因此,云数据库采用了基于角色的访问控制模型来管理普通用户的权限。在这个模型中,不同的用户被分配不同的角色,每个角色拥有一定的权限,而用户则根据其需要的操作被分配到相应的角色中。这种方式可以有效地控制用户的权限,保证数据库的安全性。

目前,数据库提供了两种角色供用户使用:高权限用户和普通用户。

  • 高权限用户主要用于管理任务,例如,创建数据库、授权基本权限和创建发布订阅等。

  • 普通用户是基本角色,用于执行各种业务逻辑操作。

PolarDB利用这种权限体系来构建数据库操作类型,实现了访问控制模型,并更有效地保障了云数据库的权限安全。

高权限用户拥有如下权限:

账号类型

权限

高权限账号

创建数据库。详情请参见创建数据库

创建插件。详情请参见插件

创建权限不高于自身的用户详情请参见创建用户

创建和使用事件触发器。详情请参见创建触发器

创建、修改类型。详情请参见创建对象类型

调用垃圾回收指令。详情请参见垃圾回收机制

创建、修改外部数据FDW。详情请参见使用oss_fdw读写外部数据文本文件

修改ROWID使用到的sequence。详情请参见ALTER SEQUENCE

创建发布和订阅。示例如下:

-- 创建发布
create publication pub for table test_t;

-- 创建订阅
create subscription sub connection 
'hostaddr=xxx.xxx.xxx.xxx port=xxxx user=PolarDB dbname=PolarDB_PG' 
publication pub;

创建系统上下文。示例如下:

CREATE CONTEXT hr_context USING test_package;

使用两阶段事务。示例如下:

-- session_1
begin;
insert into t values (1,'a');
prepare transaction 'test_1';

-- session_2
commit prepared 'test_1';
-- 或者回滚
rollback prepared 'test_1';

发送信号。示例如下:

-- 4300是一个非超级用户进程
select pg_cancel_backend(4300);
select pg_terminate_backend(4300);

查看后台进程状态。示例如下:

select * from pg_stat_activity;

修改对象名称。示例如下:

RENAME test_table TO new_test_table;

高权限用户和普通用户都不具有如下权限:

由于某些权限对于数据库有安全风险,因此目前禁止了用户的下列权限。

账号类型

权限

高权限账号/普通账号

创建文件夹。

修改系统参数。

创建表空间。

杀死超级用户进程。

执行不受信任的语言。

说明

plsql是受信任的语言,除此之外的语言均属于不受信任的语言,无法执行。

用户组权限介绍

云原生数据库PolarDB PostgreSQL版(兼容Oracle)是在PostgreSQL数据库的基础上构建的,沿用了PostgreSQL数据库的某些群组权限。以下内容将详细介绍这些群组权限的继承机制。这些权限与上面所述的高权限用户所拥有的权限具有并集的关系,即最终的权限集合是这两类权限的总和。

权限名称

权限情况

说明

pg_read_all_stats & pg_stat_scan_tables

完全

统计信息相关权限,完全拥有。

pg_signal_backend

完全

向其他进程发送信号,完全拥有。

pg_polar_superuser

完全

高权限用户组,包含了一系列高权限用户的权限,完全拥有。

pg_polar_replication

完全

提供用户使用流复制的权限,完全拥有。

pg_monitor

完全

监控权限,屏蔽了本地文件的读写权限。

pg_read_all_data & pg_write_all_data

受限

读写任意表的权限,可读写任意用户表和可读大部分系统表,安全原因屏蔽部分系统表。

pg_read_all_settings

受限

读任意参数权限,可读权限范围内的参数,安全原因屏蔽部分参数。

pg_read_server_files & pg_write_server_files

屏蔽

不支持提供读写本地文件的权限。

pg_execute_server_program

屏蔽

不支持提供执行二进制命令的权限。