PostgreSQL用户与角色简述

news2025/3/17 18:05:31

简述

  • 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.coloradmin.cn/o/1694679.html

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

相关文章

llama3-8b-instruct-262k微调过程的问题笔记(场景为llama论文审稿)

目录 一、环境配置 1.1、模型 1.2、微调环境 1.3、微调数据 二、发现的问题 2.1、过拟合问题 2.2、Qlora zero3 保存模型时OOM问题(已解决) 一、环境配置 1.1、模型 llama3-8b-instruct-262k (英文) 1.2、微调环境 Package Version ------------------…

军队仓库管理系统|DW-S301系统特点

部队仓库管理系统DW-S301系统通过数据采集、互联网和物联网技术,实现数字化智能管控,以提高军用物资的仓储准确率和流转率,缩短周转时间,降低库存成本,也有助于消除生产过程中的不确定性。 系统功能:通过部…

ComfyUI完全入门:图生图局部重绘

大家好,我是每天分享AI应用的萤火君! 这篇文章的主题和美女有关,不过并不是教大家生产美女视频,而是讲解 ComfyUI 的图生图局部重绘,其中将会以美女图片为例,来展示局部重绘的强大威力。 先看看效果&…

STM32学习和实践笔记(30):窗口看门狗(WWDG)实验

1.WWDG介绍 1.1 WWDG简介 上一章我们已经介绍了IWDG,知道它的工作原理就是一个12位递减计数器不断递减计数,当减到0之前还未进行喂狗的话,产生一个MCU复位。 窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往…

网络模型-策略路由配置

在实际网络应用中,策略路由也是一种重要的技术手段。尽管在考试并不注重策略路由,但是实际上应用较多建议考生除了掌握基本的静态路由协议IP route-static,动态路由协议RIP、还要掌握如何配置策略路由。策略路由的基本原理:根据ACL定义的不同…

基于高通公司AI Hub Models的On-Device AI学习:Introduction to On-Device AI

Introduction to On-Device AI 本文是学习 https://www.deeplearning.ai/short-courses/introduction-to-on-device-ai/这门课的学习笔记。 What you’ll learn in this course As AI moves beyond the cloud, on-device inference is rapidly expanding to smartphones, IoT…

前端-移动端布局

如何在PC端模拟移动端设备 可以在浏览器里打开检查 点击一下移动端按钮 然后选择一下对应的手机型号可以切换到对应的手机端 响应式布局实现方法 Viewport Flex 弹性盒子 Flex容器属性 flex-direction flex-wrap justify-content align-items align-content 进阶学习建议 Vu…

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

Express 的 req 和 res 对象

新建 learn-express文件夹,执行命令行 npm init -y npm install express 新建 index.js const express require(express); const app express();app.get(/, (req, res, next) > {res.json(return get) })app.post(/, (req, res, next) > {res.json(retur…

在 Ubuntu 22 上深入了解和搭建 Minikube

在 Ubuntu 22 上深入了解和搭建 Minikube Minikube 是一个开源工具,使开发者能够在本地计算机上运行单节点的 Kubernetes 集群,非常适合于开发、测试和学习 Kubernetes 的基础知识。在这篇文章中,我们将深入了解 Minikube 的工作原理&#x…

【vue echart】完成一个简单echart图表+自适应

实现效果&#xff1a; html&#xff1a; <divref"echartOne"id"echartOne"style"width: 100%; height: 100%" ></div> js: getEchartOne() {let chart this.$echarts.init(this.$refs.echartOne);chart.setOption({title: {text:…

【全部更新完毕】2024电工杯A题数学建模详细思路代码文章分享

A 题&#xff1a;园区微电网风光储协调优化配置 摘要 在全球范围内&#xff0c;气候变化和环境污染问题日益严重&#xff0c;减少碳排放和实现可持续发展成为各国的共同目标。新能源&#xff0c;尤其是风能和光伏发电&#xff0c;因其清洁、可再生的特性&#xff0c;正在全球范…

Python vscode debug: Error while enumerating installed packages.解决

记录一个vscode python debug时出现的错误&#xff1a; 具体错误如下&#xff1a; E00000.030: Error while enumerating installed packages. Traceback (most recent call last): File “/root/.vscode-server/extensions/ms-python.debugpy-2024.0.0-linux-x64/bundled/lib…

【C++11】lambda匿名函数和包装器

目录 一&#xff0c;lambda匿名函数 1-1&#xff0c;lambda的引入 1-2&#xff0c;lambda表达式书写格式 1-3&#xff0c;lambda函数的名称 1-4&#xff0c;lambda捕获列表的使用 1-5&#xff0c;函数对象与lambda表达式 二&#xff0c;包装器 2-1&#xff0c;function…

逻辑这回事(一)----编码规范

说明&#xff1a;优先级是M的规则为强制项&#xff0c;优先级为R的规则为建议项。 通用约束 应有全局观念。 优先级&#xff1a;M 说明&#xff1a;你所编写的代码在成为最终硅片上的一部分之前&#xff0c;需要经过许多设计者利用各种各样的工具进行各种各样的处理。有时&…

【编译原理】LL(1)预测分析法

一、实验目的 LL(1)的含义&#xff1a;第一个L表明自顶向下分析是从左向右扫描输入串&#xff0c;第2个L表明分析过程中将使用最左推导&#xff0c;1表明只需向右看一个符号便可决定如何推导&#xff0c;即选择哪个产生式进行推导。 LL(1) 预测分析方法是确定的自顶向下的语…

[保姆式教程]使用目标检测模型YOLO V8 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

最近需要做基于卫星和无人机的农业大棚的旋转目标检测&#xff0c;基于YOLO V8 OBB的原因是因为尝试的第二个模型就是YOLO V8&#xff0c;后面会基于YOLO V9模型做农业大棚的旋转目标检测。YOLO V9目前还不能进行旋转目标的检测&#xff0c;需要修改代码 PS:欢迎大家分享农业大…

Capture One Studio for Mac:打造完美影像的利器

对于摄影师而言&#xff0c;每一次按下快门都是一次对完美影像的追求。而Capture One Studio for Mac正是这样一款能够帮助你实现这一追求的利器。 Capture One Studio for Mac v16.4.2.1中文直装版下载 首先&#xff0c;Capture One Studio for Mac拥有出色的图像处理能力。它…

网络初识 二

一、TCP/IP五层协议 -> 应用层 : 传输的数据在应用程序中如何使用 -> 传输层 : 关注的是通信的起点终点 -> 网络层 : 关注的是通信中的路线规划 -> 数据链路层 : 关注的是相邻节点之间的通信细节 -> 物理层 : 网络通信的基础设施 说是五层,实际上下面…

【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…