PostgreSQL用户与角色简述

简述

  • PostgreSQL通过角色(role)来控制数据库的访问权限。角色可以拥有数据库对象(比如表、函数等),并允许将这些对象的权限授予其他角色,从而实现对象访问的控制。
  • 角色(role)包含了两种概念:①具有登录权限的角色称为用户(user);②包含其他成员的角色称为组(group)。
    在这里插入图片描述

用户和组

  • 数据库使用过程中,DBA通常会创建多个用户,并根据用户的实际情况赋予权限。为了便于权限管理,可创建角色,然后将角色赋予用户。通过角色权限的授予和撤销操作,批量控制用户权限。此时的角色充当的是组(group)的概念,用户加入到这个组便拥有了这个组的权限。
  • PostgreSQL不允许两个角色互为授权。
  • PUBLIC为PostgreSQL中的特殊角色,不能将其设置为任何组的成员。

权限与继承

  • 在SQL标准中,用户和角色存在明确的差异,用户不会自动继承权限,而角色会继承权限。
  • PostgreSQL通过INHERITNOINHERIT属性来实现上述标准,只需为角色设置INHERIT属性,为用户设置NOINHERIT属性。为了兼容8.1之前的版本属性,PostgreSQL默认为所有的角色设置了INHERIT属性,因此用户默认会自动继承它所在组的权限。
  • 只有数据库的对象上的普通权限可以被继承,角色的LOGINSUPERUSERCREATEDBCREATEROLE权限被认为是特殊权限,不会被继承。

SET ROLE命令

  • 用户在登录后,可使用SET ROLE命令,让当前会话临时拥有某个角色的权限;
  • 执行该命令后,此时会话将拥有角色的权限,而不是登录用户的权限;
  • 会话过程创建的数据库对象将归角色所有,而不是登录用户所有。

案例说明

创建三个角色db_usernet_managersys_manager

-- 创建角色,并赋予登录权限,此时的db_user就可以用于登录数据库。
CREATE ROLE db_user LOGIN INHERIT;
-- 创建角色,并赋予schema中所有表的查询权限。
CREATE ROLE net_manager NOINHERIT;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO net_manager;
-- 创建角色,并赋予schema中所有表的插入权限。
CREATE ROLE sys_manager NOINHERIT;
GRANT INSERT ON ALL TABLES IN SCHEMA public TO net_manager;
-- 将net_mananger权限授予db_user
GRANT net_manager to db_user;
-- 将sys_mananger权限授予sys_mananger
GRANT sys_manager to net_manager;

使用db_user登录后,数据库会话会同时拥有db_usernet_manager的权限,但不具备sys_manager的权限,即只能执行查询操作,无法执行插入操作。
虽然db_user间接成为了sys_manager的成员,但由于net_manager获得的成员资格具有NOINHERIT属性,不会自动继承权限。

-- 执行下述指令,会话将拥有net_manager的权限,但不再具备db_user权限,同时也无法继承sys_manager的特权
SET ROLE net_manager
-- 执行下述指令中的任意一个,可将会话权限恢复至初始状态
SET ROLE db_user;
SET ROLE NONE;
RESET ROLE;

角色设置的指令

创建角色

create role xxxx;

删除角色

drop role xxxx;

删除角色前需要删除角色拥有的对象,或将对象的所有权赋予其他角色,同时还需要撤销授予该角色的权限,否则删除会报错。

为角色赋予属性

属性名说明
LOGIN具备LOGIN属性的角色才能连接数据库
SUPERUSER超级用户属性,请谨慎使用或不使用 。只有超级用户才能创建、修改其他超级用户
CREATEDB除超级用户外,只有拥有该属性的角色才能创建数据库
CREATEROLE除超级用户外,只有拥有该属性的角色才能创建、修改、删除其他角色,并为这些角色授权或撤销权限。该特权无法管控超级用户
REPLICATION启动流复制权限,拥有该属性的角色必须同时拥有LOGIN属性
password为角色设置密码,只有当角色用于连接数据库时,该属性才有意义。可追加配置valid until设置有效期
-- 创建角色并赋予属性
CREATE ROLE xxx WITH LOGIN SUPERUSER CREATEDB CREATEROLE REPLICATION PASSWORD 'xxxx' VALID UNTIL '2099-01-01'
-- 修改用户属性,移除其创建角色的属性
ALTER ROLE xxx NOCREATEROLE;

为角色授权

PostreSQL中可使用GRANT语句为角色授权,以表为例,语法如下:

-- privilege_list 可以是SELECT、INSERT、UPDATE、DELETE、TRUNCATE
-- WITH GRANT OPTION意味着被授权的角色可以将该权限再授权其他角色。
-- 将某张表的XX权限赋予某个角色
GRANT privilege_list | ALL ON [TABLE] table_name TO role_name WITH GRANT OPTION;
-- 将某个schema下所有表的XX权限赋予角色
GRANT privilege_list | ALL ON ALL TABLES IN SCHEMA schema_name TO role_name;

撤销角色授权

PostreSQL中可使用REVOKE语句撤销角色,以表为例,语法如下:

-- privilege_list 可以是SELECT、INSERT、UPDATE、DELETE、TRUNCATE
-- 撤销某张表的XX权限
REVOKE privilege_list | ALL ON TABLE table_name FROM role_name;
-- 撤销某个schema下所有表的XX权限
REVOKE privilege_list | ALL ON ALL TABLES IN SCHEMA schema_name FROM role_name;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19、设计模式之命令模式

命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对…

虹科Pico汽车示波器 | 免拆诊断案例 | 2012 款雪佛兰科鲁兹车偶尔多个故障灯异常点亮

故障现象 一辆2012款雪佛兰科鲁兹车,搭载1.8 L 发动机,累计行驶里程约为9.6万km。该车组合仪表上的发动机故障灯、ABS故障灯及动力转向故障灯偶尔异常点亮,同时发动机转速表和发动机冷却液温度表的指针会突然归零,严重时发动机无…

独享IP是原生IP吗?二者有何区别?

原生IP: 原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中…

C++ 学习 关于无符号数的计算

C 学习 关于含无符号数表达式的计算 🌈 哈喽,失踪人口回归 这篇blog 来源于C 的学习 当然C语言同样适用 C Primer 的笔记 🌿让我们从一个问题开始 如果你回答对了 那么就可以跳过了~ 对于下面的问题 //读程序写结果。 unsigned u 10,u2 42…

牛客NC367 第K个n的排列【困难 dfs,全排列问题 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54 思路 全排列问题本文提供的答案在力扣同一道题60. 排列序列,超时了但是截止文章发表日,牛客上是能通过全部测试用例的Java代码 import java.util.*;pu…

Redis - 优惠卷秒杀

场景分析 为了避免对数据库造成压力,我们在新增优惠卷的时候,可以将优惠卷的信息储存在Redis中,这样用户抢购的时候访问优惠卷信息,通过Redis读取信息。 抢购流程: 业务分析 既然在新增优惠卷的时候,我…

【c语言】了解指针,爱上指针(5)

了解指针,爱上指针(5) 回调函数qsort函数冒泡排序模拟实现qsort函数 回调函数 回调函数:就是一个通过函数指针调用的函数。 把函数的指针作为参数传给另一个函数,当这个指针被用来调用指向的函数时,此时被…

【Kotlin 一】Kotlin入门知识简介、变量声明、数字类型

1. Kotlin简介 Kotlin旨在解决 Java语言在编码效率和代码质量上存在的问题,并且与Java语言完全兼容。Kotlin通过简化语法、提供更强大的函数以及减少样本代码的编写,使开发者能够更高效地编写代码。Kotlin适用于Android、Web后端开发等多种场景 2.Kotl…

PHP获取文件路径getcwd()、__DIR__、__FILE__的区别

getcwd() getcwd() 是一个函数,它返回当前工作目录(CWD)的完整路径。当前工作目录是脚本开始执行时所在的目录,除非在脚本执行过程中通过 chdir() 函数进行了更改。 $cwd getcwd(); echo $cwd; // 输出当前工作目录的完整路径…

驱动编译报error: negative width in bit-field ‘<anonymous>’错误

错误如下图所示: 代码如下: 问题点:module_param的其他用户的权限参数上。 在Linux中,文件权限由读(r)、写(w)、执行(x)权限组成,分别对应数值4、2、1。 第一位0是占位符,在这里没有意义,因为…

ARM PMU - Performance Monitor Unit 用途和原理

From:程序员秘书 ARM Performance Monitor Unit (PMU) 是一种硬件组件,用于跟踪和计数系统中的底层硬件事件。集成在ARM架构的处理器中,用于监控和度量处理器及系统性能的关键指标。它对于性能分析、调试、能耗管理和优化软件性能至关重要。…

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData DotNet-MetaData是一款针对.NET恶意软件的安全分析工具,该工具专为蓝队研究人员设计,可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。 工具架构 当前版本的DotNet-MetaData主要由以下两个部分组成&#xf…

java图书电子商务网站的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书电子商务网站的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 图书电子商…

基于附带Attention机制的seq2seq模型架构实现英译法的案例

模型架构 先上图 我们这里选用GRU来实现该任务,因此上图的十个方框框都是GRU块,如第二张图,放第一张图主要是强调编码器的输出是作用在解码器每一次输入的观点,具体的详细流程图将在代码实现部分给出。 编码阶段 1. 准备工作…

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了,但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的,很可能会退化为单分支的情况,那样效率就极低了,那么有没有方法来弥补二叉搜索树的缺陷呢? 那么AVL树就出现了&…

6.小程序页面布局 - 账单明细

文章目录 1. 6.小程序页面布局 - 账单明细1.1. 竞品1.2. 布局分析1.3. 布局demo1.4. 页面实现-头部1.5. 账单明细1.5.1. 账单明细-竞品分析1.5.2. 账单明细-实现1.5.2.1. 账单明细-实现-mock数据1.5.2.2. 每日收支数据的聚合整理1.5.2.3. 页面scroll-view 1.6. TODO 1. 6.小程序…

java —— 封装、继承、接口和多态

一、封装 封装是将数据和操作这些数据的方法整合成一个类。在这个类中,用 private 修饰符将某些数据隐藏起来,只通过特定的方法实现这些数据的访问和修改,以此实现数据的完整和安全性。 封装的步骤: 二、继承 继承是指把子类共有…

Meta发布Chameleon模型预览,挑战多模态AI前沿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【数据结构与算法】之堆的应用——堆排序及Top_K问题!

目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、堆排序 对一个无序的数组…

03_前端三大件CSS

文章目录 CSS用于页面元素美化1.CSS引入1.1style方式1.2写入head中,通过写style然后进行标签选择器加载样式1.3外部样式表 2.CSS样式选择器2.1 元素选择器2.2 id选择器2.3 class选择器 3.CSS布局相关3.1 CSS浮动背景:先设计一些盒子因此,引出…