postgresql用户和角色
postgresql用户和角色
- 简述
- 创建角色
- 角色属性
- 登录特权
- 超级用户
- 创建数据库
- 创建角色
- 启动复制
- 密码
- 修改角色属性
- 对象授权
- 撤销授权
- 组和成员
- 删除角色
简述
PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念,具有登录
权限的角色称为用户,包含其他成员(也是角色)的角色称为组(group)。因此,一个角色可
以是一个用户,也可以是一个组,或者两者都是。
角色可以拥有数据库对象(例如表和函数),并且可以将这些对象上的权限授予其他角色,
从而控制对象的访问。此外,一个组中的成员可以拥有该组所拥有的权限
创建角色
在 PostgreSQL 中,使用 create role 语句创建角色:
-- 创建角色 name
-- name 指定了要创建的角色名称
create role name;
-- 显示当前数据库集群中已有的角色,可以查询系统目录 pg_roles:
-- 系统默认提供的角色名称,用于提供针对一些特定的常用特权和信息的访问权限
select rolname from pg_roles;

其中的 postgres 是系统初始化数据库时创建的默认角色,它是一个超级用户
默认角色包含的具体权限
角色属性
角色可以拥有属性,属性确定了角色拥有的特权,并且在登录时与客户端认证系统进行交互。
常见的角色属性包括
登录特权
-- 具有 login 属性的角色才能连接数据库。具有 login 角色的用户可以被看作一个"数据库用户"
create role name LOGIN;
-- 默认包含LOGIN权限,而 CREATE ROLE 没有
create user name;
超级用户
/*,数据的超级用户可以避开所有的权限检查,只验证登录权限。因此,这是一
个很危险的特权,使用时需要特别小心;最好在日常的操作中避免使用超级用户。
只有超级用户才能创建其他的超级用户。
*/
create role name SUPERUSER;
创建数据库
--只有明确授权的角色才能够创建数据库(超级用户除外,因为他们可以避开权限检查
create role name CREATEDB;
创建角色
--只有明确授权的角色才能够创建其他角色(超级用户除外,因为他们可以避开权限检查
--具有 CREATEROLE 特权的角色还可以修改或删除其他角色,以及为这些角色授予或者
--撤销成员角色。但是,针对超级用户的创建、修改、删除,以及它的成员变更,需要超
--级用户特权;CREATEROLE 特权无法针对超级用户执行这些操作
create role name CREATEROLE;
启动复制
--只有明确授权的角色才能够启动流复制(超级用户除外,因为他们可以避开权限检查)。用于流复制的角色还需要拥有 LOGIN 特权
create role name REPLICATION LOGIN;
密码
-- 只有当用户连接数据库使用的客户端认证方法要求提供密码时,密码属性才有意义
-- password 和 md5 认证方法需要使用密码。数据库的密码与操作系统的密码相互独立
-- 创建角色的同时,同时指定角色密码
create role name password '123456';
--在创建角色时,可以根据需要指定某些属性
create role tony with LOGIN password 'Pass2022' valid until '2025-01-01';
-- 创建一个管理角色 admin,它具有创建数据库和创建角色的特权
--最好创建一个拥有 CREATEDB 和 CREATEROLE 特权,但不具有超级用户特权
--的管理角色,然后使用该角色执行日常的数据库和角色的管理。这种方式可以避免过度使用超级
--用户可能带来的风险
create role admin CREATEDB CREATEROLE;
修改角色属性
alter role admin NOCREATEROLE;
对象授权
PostgreSQL 使 GRANT 语句进行数据库对象的授权操作。以表为例,基本的授权语法如下
grant privilege_list | ALLon [ table ] table_nameto role_name;
privilege_list 权限列表可以是 SELECT、INSERT、UPDATE、DELETE、TRUNCATE
等,ALL 表示表上的所有权限
--将 employees、departments 和 jobs 表上的增删改查权限授予了 tony 用户
-- 此时 tony用户就可以访问这些表中的数据grant select, insert, update, deleteon employees, departments, jobs to tony;
对表进行授权的 GRANT 语句还支持一些其他选项:
GRANT privilege_list | ALLON ALL TABLES IN SCHEMA schema_nameTO role_name;
ALL TABLES IN SCHEMA 表示某个模式中的所有表,可以方便批量授权操作。例如:
--该语句将 public 模式中所有表的查询权限授予 tony 用户。
grant select
on all tables in schema public
to tony;
也可以在 GRANT 语句的最后指定一个 WITH GRANT OPTION,意味着被授权的角色
可以将该权限授权其他角色
-- tony 用户不但拥有这些表上的访问权限,还可以将这些权限授予其他角色
GRANT SELECT, INSERT, UPDATE, delete
ON employees, departments, jobs
TO tony WITH GRANT OPTION;
除了授权表的访问权限之外,GRANT 语句还支持字段、视图、序列、数据库、函数、过程、
模式等对象的授权操作。授权操作的语句基本都类似
官网介绍
撤销授权
PostgreSQL 使 REVOKE 语句撤销数据库对象上的权限。同样以表为例,基本的撤销授权语句如下:
REVOKE privilege_list | ALLON TABLE table_nameFROM role_name;
--其中的参数和 grant 语句一致。例如:
revoke select, insert, update, delete
on employees, departments, jobs
from tony;
REVOKE 语句也支持对某个模式中的所有对象进行操作:
REVOKE privilege_list | ALLON ALL TABLES IN SCHEMA schema_nameFROM role_name;
撤销了用户 tony 在 public 模式中所有表上的查询权限
revoke select
on all tables in schema public
from tony;
与 GRANT 语句对应,REVOKE 语句还支持字段、视图、序列、数据库、函数、过程、模
式等对象的撤销授权操作。官网介绍
组和成员

在现实的环境中,管理员通常需要管理大量的用户和对象权限。为了便于权限管理,减少复
杂度,可以将用户进行分组,然后以组为单位进行权限的授予和撤销操作。
为此,PostgreSQL 引入了组(group)角色的概念。具体来说,就是创建一个代表组的角色,
然后将该组的成员资格授予其他用户,让其成为该组的成员。
--使用以下创建一个组角色
create role group_name;
按照习惯,组角色通常不具有 LOGIN 特权,也就是不能作为一个用户登录
--创建一个组 managers
create role managers;
--使用与对象授权操作相同的 grant 和 revoke 语句为组添加和删除成员:
-- managers组添加用户tony
grant managers to tony
--PostgreSQL 不允许设置循环的成员关系,也就是两个角色互相为对方的成员GRANT tony TO managers;

不能将特殊角色 PUBLIC 设置为任何组的成员
组角色中的成员可以通过以下方式使用该组拥有的特权:
- 首先,组中的成员可以通过 SET ROLE 命令将自己的角色临时性“变成”该组角色。此时,
当前数据库会话拥有该组角色的权限,而不是登录用户的权限;并且会话创建的任何数
据库对象归组角色所有,而不是登录用户所有。 - 其次,对于具有 INHERIT 属性的角色,将会自动继承它所属的组的全部特权,包括这些
组通过继承获得的特权
CREATE ROLE user1 LOGIN INHERIT;
CREATE ROLE net_admins NOINHERIT;
CREATE ROLE sys_admins NOINHERIT;
GRANT net_admins TO user1;
GRANT sys_admins TO net_admins;
使用角色 user1 登录之后,数据库会话将会拥有 user1 自身的特权和 net_admins 所有的特权,
因为 user1“继承”了 net_admins 的特权。但是,会话还不具有 sys_admins 所有的特权,因为即使
user1 间接地成为了 sys_admins 的成员,通过 net_admins 获得的成员资格具有 NOINHERIT 属性,
也就不会自动继承权限。

删除角色
-- drop role 角色名称;
DROP ROLE name;
如果删除的是组角色,该组中的成员关系会自动从组中删除,但是这些成员角色自身不会受
到任何影响
由于角色可以拥有数据库中的对象,也可以拥有访问其他对象的权限,删除角色通常不仅仅
只是一个简单的 DROP ROLE 语句。在删除角色之前,需要删除它所拥有的对象,或者将这些对
象重新赋予其他的角色;同时还需要撤销授予该角色的权限。详细信息可以参考官方文档
相关文章:
postgresql用户和角色
postgresql用户和角色 简述创建角色角色属性登录特权超级用户创建数据库创建角色启动复制密码修改角色属性 对象授权撤销授权组和成员删除角色 简述 PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念,具有登录 权限的角色称为用户ÿ…...
设计模式之备忘录模式
文章目录 游戏角色状态恢复问题传统方案解决游戏角色恢复传统的方式的问题分析备忘录模式基本介绍游戏角色恢复状态实例备忘录模式的注意事项和细节 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大…...
大数据Flink(八十八):Interval Join(时间区间 Join)
文章目录 Interval Join(时间区间 Join) Interval Join(时间区间 Join) Interval Join 定义(支持 Batch\Streaming):Interval Join 在离线的概念中是没有的。Interval Join 可以让一条流去 Jo…...
数字IC笔试千题解--判断题篇(五)
前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的。 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料…...
Kubernetes(k8s)上搭建一主两从的mysql8集群
Kubernetes上搭建一主两从的mysql8集群 环境准备搭建nfs服务器安装NFS暴露nfs目录开启nfs服务器 安装MySQL集群创建命名空间创建MySQL密码的Secret安装MySQL主节点创建pv和pvc主节点的配置文件部署mysql主节点 安装第一个MySQL Slave节点创建pv和pvc第一个从节点配置文件部署my…...
MySQL备份与恢复
MySQL备份与恢复一、备份1、数据备份的重要性2、数据备份分类2.1 物理备份2.2 逻辑备份 3、数据库备份策略4、常用的备份方法和工具5、数据库上云迁移 二、数据库完全备份1、简介2、物理冷备份与恢复2.1 物理冷备份2.2 备份恢复2.3 补充知识date 3、mysqldump备份与恢复3.1 完全…...
【RTOS学习】单片机中的C语言
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 本喵默认各位小伙伴都会C语言,我们平时学习C语言都是在Windows环境下学习的࿰…...
确知波束形成matlab仿真
阵列信号处理中的导向矢量 假设一均匀线性阵列,有N个阵元组成,满足:远场、窄带假设。 图1. 均匀线性阵模型 假设信源发射信号,来波方向为 θ \theta θ,第一个阵元接收到的信号为 x ( t ) x(t) x(t),则第…...
并发编程相关面试题
线程基础 线程和进程的区别: ----------------------------------------------------------------------- 创建线程的方式: 1 继承Thread类 2 实现runnable接口 3 实现callable 接口(有返回值的) 4 线程池创建线程 ------…...
Cpp/Qt-day050921Qt
目录 实现使用数据库的登录注册功能 头文件: registrwidget.h: widget.h: 源文件: registrwidget.c: widget.h: 效果图: 思维导图 实现使用数据库的登录注册功能 头文件: registrwidget.h: #ifndef REGISTRWIDGET_H #de…...
视频汇聚/视频云存储/视频监控管理平台EasyCVR分发rtsp流起播慢优化步骤详解
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面
饿了吗完成用户注册登录界面搭建axios之get请求axios之post请求跨域 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖,在项目根目录使用命令npm install element-ui -S,添加Element-UI模块 -g:将依赖下载node_glodal全局依…...
2023华为杯研究生数学建模研赛E题出血脑卒中完整论文(含28个详细预处理数据及结果表格)
大家好呀,从发布赛题一直到现在,总算完成了全国研究生数学建模竞赛(数模研赛)E题完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。…...
Java中的继承是什么?
在Java中,继承是一种面向对象编程的概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承,子类可以获得父类的属性和方法,并且可以添加自己的特…...
Python - flask后端开发笔记
Flask入门 有一篇很全面的博客可以参考:Python Flask Web 框架入门 跨域问题处理 from flask_cors import CORS CORS(app,supports_credentialsTrue,origins[url], # 前端url列表 ) 文件发送 from flask import send_from_directory app.route(/download) …...
Flutter实现PS钢笔工具,实现高精度抠图的效果。
演示: 代码: import dart:ui;import package:flutter/material.dart hide Image; import package:flutter/services.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:kq_flutter_widgets/widgets/animate/stack.dart…...
苏宁滑块验证
网址:https://passport.suning.com/ids/login总结一下,别被他的表面现象给骗了,这玩意儿,个人认为,腾讯的都没法跟他比!!! 难点:动态混淆,vmp,图片…...
c语言。。。
gcc thread.c -lpthread -o app -fexec-charsetgbkthread.c为当前目录下编写的c代码 代码中引入了<pthread.h>线程库,所以要加上-lpthread -o app 输出.exe的c可执行文件,文件名为app -fexec-charsetgbk 设置编码方式,防止控制台输出中…...
vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范
vue-cli创建项目、vue项目目录结构、 ES6导入导出语法、vue项目编写规范 1 vue-cli创建项目 1.1 vue-cli 命令行创建项目 1.2 使用vue-cli-ui创建 2 vue项目目录结构 2.1 运行vue项目 2.2 vue项目的目录结构 3 es6导入导出语法 4 vue项目编写规范 4.1 修改项目 4.2 以后…...
QT读取DLL加载算法
有这样一个场景,我有一个GUI软件,把他想象成PS软件,集成了很多工具。现在我要添加新算法(PS工具),该怎么办? 有三种办法: 第一种我把新算法代码加到项目中,编译整个项目。 第二种,新…...
DreamTalk与3DMM参数:如何提取和利用面部表情风格特征
DreamTalk与3DMM参数:如何提取和利用面部表情风格特征 【免费下载链接】dreamtalk Official implementations for paper: DreamTalk: When Expressive Talking Head Generation Meets Diffusion Probabilistic Models 项目地址: https://gitcode.com/gh_mirrors/d…...
vim入门配置教程
Vim 最简配置教程(新手直接抄) 1. 找到配置文件 Linux/Mac/WSL vim ~/.vimrcWindows 文件路径:C:\Users\用户名\_vimrc 2. 直接粘贴通用好用配置 " 基础设置 set number " 显示行号 set relativenumber " 相对行号 …...
【论文阅读】从过程技能到策略基因:走向经验驱动的测试时进化 From Procedural Skills to Strategy Genes: Towards Experience-Driven
从过程技能到策略基因:走向经验驱动的测试时进化 From Procedural Skills to Strategy Genes: Towards Experience-Driven Test-Time Evolution 作者:Junjie Wang˒* Yiming Ren˒* Haoyang Zhang* InfiniteEvolutionLab, EvoMap 清华大学 wangjunjie@sz.tsinghua.edu.cn…...
从STM32F405到AT32F435:手把手教你给AocodaRC飞控换‘芯’并刷入BetaFlight固件
从STM32F405到AT32F435:国产芯片飞控改造全流程实战 对于追求极致性能的无人机玩家而言,飞控系统的硬件升级永远是绕不开的话题。当雅特力AT32F435这颗国产芯片以更高的主频、更大的Flash容量和更丰富的外设资源进入视野时,很多飞手已经按捺不…...
告别手写解析!用Python Cantools 39.4.5一键生成CAN/CANFD DBC的C代码(附批处理脚本)
从DBC到C代码:Python Cantools全自动转换实战指南 在汽车电子和嵌入式开发领域,CAN总线通信是核心基础设施,而DBC文件则是定义CAN/CANFD通信协议的行业标准。传统开发流程中,工程师需要手动解析DBC文件并编写大量信号打包/解包代码…...
Flyback电源里,为什么TVS管和二极管要‘组队’才能搞定电压尖峰?
Flyback电源中TVS管与二极管的协同钳位机制解析 在反激式(Flyback)电源设计中,初级侧的电压尖峰抑制一直是工程师面临的棘手问题。许多初学者会疑惑:为什么不能像继电器线圈保护那样,仅用单个二极管实现钳位?这个看似简单的疑问背…...
Google I/O 2026 推出 Antigravity SDK:本地构建 AI Agent,灵活定制功能
Antigravity SDK 登场当开发者需要将 AI 能力嵌入自有应用时,常见做法是通过 API 调用远程 Agent 服务,但这种方式存在延迟高、定制性差、依赖网络等问题。据悉,Google 在 I/O 2026 大会上给出了另一种解法 ---- Antigravity SDK,…...
计算机视觉与VR融合:构建远程协助独居老人的智能生活守护系统
1. 当计算机视觉遇见VR:守护独居老人的科技新思路 早上8点,张阿姨家的智能摄像头捕捉到她起床时的一个踉跄,这个细微动作触发了系统的预警机制。200公里外的女儿立刻收到通知,戴上VR眼镜后,她仿佛瞬间"穿越"…...
3大AI创作效率瓶颈的模块化解法:ComfyUI企业级工作流自动化实践
3大AI创作效率瓶颈的模块化解法:ComfyUI企业级工作流自动化实践 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI …...
别再只用CIoU了!手把手教你用WIoU损失函数提升YOLOv5/v8模型精度(附代码对比)
超越CIoU:用WIoU损失函数解锁YOLOv5/v8模型的隐藏潜力 当目标检测模型的mAP指标陷入停滞,许多工程师的第一反应是调整数据增强策略或更换更复杂的网络结构。但鲜少有人意识到,损失函数这个看似基础的组件,往往才是突破精度瓶颈的…...
