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工具),该怎么办? 有三种办法: 第一种我把新算法代码加到项目中,编译整个项目。 第二种,新…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...