【PostgreSQL】系列之 一 用户创建和授权(三)

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁
🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
目录
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁
一、PostgreSQL权限概述
1.1 初始角色
1.2 权限 - PRIVILEGES
1.3 权限的组成
1.4 特殊的权限
1、owner拥有特权
2、PUBLIC
1.5 授权 - GRANT
二、Schema创建和授权实操
三、重新为用户授权
四、查询schema是否存在
五、客户端鉴权
六、postgresql 执行sql文件
一、PostgreSQL权限概述
1.1 初始角色
数据库刚创建时,会自动创建一个超级用户的角色:postgres。任何操作都是从该用户开始的。
PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客(摘录博客)
1.2 权限 - PRIVILEGES
角色有了,决定角色能够执行哪些数据库操作,则需要权限进行管理。PG将权限分为了两部分。这里所说的权限,主要指第二部分
- 能否登录、创建database、创建role,这类重要权限,在创建role时指定;在pg_roles表中可查看
- 对数据库对象的各类操作的权限,通过GRANT手动授予;在information_schema.xxx_privileges表中可查看,比如information_schema.table_privileges
1.3 权限的组成
一个完整的权限描述:角色A对表table1具有SELECT权限,有三部分组成
- 角色:A
- 授权目标:table1
- 权限:SELECT
1.4 特殊的权限
1、owner拥有特权
当一个数据库对象被创建后,它会被自动分配一个owner,一般来说是执行创建语句的那个角色。大多数情况下,owner及其成员能够对该对象做任何事,如果其他人想要操作它,则需要GRANT授权。
可修改owner,超级用户、对象原本的owner、owner的成员都能够调整对象的owner
alter table table_name owner to new_owner;
2、PUBLIC
PUBLIC并不是一个真正的角色,确切地说,它应该算一个关键字,当授权的目标是它时,表示:授予系统中的所有角色,包括今后定义的角色。
PUBLIC默认是拥有以下权限
- 本地登录
- 对public的USAGE权限
- 对public的CREATE权限
字面意思理解,相当于将该权限公开。
1.5 授权 - GRANT
-- 授予权限
GRANT {权限} ON {授权目标} TO {被授权角色} [WITH GRANT OPTION]
-- 授予角色
GRATE {角色} TO {被授权角色} [WITH ADMIN OPTION] [GRANTED BY 角色]
ALL PRELEGES:它是针对一个授权目标的所有权限的总和。
WITH ADMIN OPTION:授权传递,被授权的角色,可以传递授权
# 授予用户 zhangsan 数据库 kangkang 的所有权限
grant all privileges on database kangkang to zhangsan;
# 授权当前database 的指定kangll_schema的所有表的只读权限给zhangsan 角色
grant select on all tables in schema kangll_schema to zhangsan;
如下查询结果表示:kangll_test 数据中 public 下 stu 表,kangll 用户拥有所有权限, zhang 用户拥有只读权限,都是 kangll 用户授予的。

我们换个数据库查询下,可以看到 Access privileges为空,表明:其owner对该表有完整的权限

二、Schema创建和授权实操
创建数据库 kangkang, 我使用 postgres用户 完成
CREATE DATABASE kangkang;
创建名为 zhangsan 的用户,请运行以下命令:
CREATE USER zhangsan WITH PASSWORD '123456';-- 修改密码
alter user zhangsan with password 'password';
授予zhangsan用户 kangkang 数据库的所有权限
grant all privileges on database kangkang to zhangsan;
现在 使用zhangsan 用户登录数据库, 创建名为 kangll_schema 的 schema
CREATE SCHEMA kangll_schema;## 删除可以执行如下命令
DROP SCHEMA kangll_schema;
执行结果:

授予名为 zhangsan 用户对名为 kangll_schema 的 schema 下表的所有操作权限
GRANT USAGE ON SCHEMA kangll_schema to zhangsan;
grant all privileges on all tables in schema kangll_schema to zhangsan;
grant all privileges on all sequences in schema kangll_schema to zhangsan;
grant select,insert,update,delete on all tables in schema kangll_schema to zhangsan;
授权完成

kangkang数据库中创建 stu 表
CREATE TABLE kangll_schema.stu(stu_id BIGINT NOT NULL,stu_name VARCHAR(255) NOT NULL);# 插入数据
INSERT INTO kangll_schema.stu VALUES(1, 'kangll');# 查询
SELECT * FROM kangll_schema.stu;
执行过程:

可以看到 zhangsan 用户对 stu 表拥有所有权限, 也可以看到 Access privileges为空

撤销 权限后 重新分配 只读权限, zhangsan 用户拥有只读权限,且权限是 zhangsan 用户授予的 ,可以看到 Access privileges 不为空 ,为zhangsan 用户的 “r” 权限。

三、重新为用户授权
-- 取消权限
REVOKE [GRANT OPTION FOR] {权限} ON {授权目标} FROM {被授权人} [CASCADE | RESTRICT]
-- 取消角色
REVOKE [ADMIN OPTION FOR] {角色} FROM {被授权角色} [CASCADE | RESTRICT]
示例:
-- 切换到doki_database下
\c kangkang
-- 收回用户在 kangll_schema 下所有表的所有权限
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA kangll_schema FROM zhangsan;-- 为zhangsan 赋予kangkang 数据库下的查询权限
GRANT select ON all TABLES IN SCHEMA kangll_schema to zhangsan;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA kangll_schema TO zhangsan;
执行过程:

四、查询schema是否存在
查询 PostgreSQL 数据库中是否存在某个特定的 schema,可以使用以下 SQL 命令:
SELECT * FROM information_schema.schemata WHERE schema_name = 'kangll_schema';
查询可以看到 schema_name 和 对应schema的 所属者,如果查询结果为空则对应的schema 不存在。
五、客户端鉴权
角色创建后好,还需要确认pg_hba.conf 的配置, 如果没有配置并不能直接通过网络连接到PG服务端。一般我们都是在安装完数据库就需要配置。
vim /var/lib/pgsql/15/data/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
host all all 0.0.0.0/0 md5
配置文件说明:
TYPE
- local:本地连接
- host:使用TCP/IP连接
DATABASE: 许连接的database
USER: 允许连接的角色
ADDRESS: 允许的客户端地址,0.0.0.0/0表示允许所以客户端连接
METHOD: 鉴权方式
- trust:无条件允许连接
- reject:无条件拒绝
- password:要求客户端提供未加密的密码进行身份验证,密码在网络上以明文形式传输,如果使用SSL,可以加密传输
- scram-sha-256:执行 SCRAM-SHA-256 身份验证,这是一种质询响应机制,这是目前最安全的方式,不过有的数据库客户端可能不支持。
- md5:也是一种质询响应机制
- peer:获取客户端操作系统的用户名,如果和请求连接的用户名一样。这只有在本地连接时才有用。
- xxx:都是其它的鉴权方式,官网参考: PostgreSQL: Documentation: 15: 21.1. The pg_hba.conf File
六、postgresql 执行sql文件
# 切换到postgres用户
sudo -i -u postgres
psql -d testdb -U postgres -f /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql或者
sudo -u postgres psql -d kangkang -U postgres -f /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql


参考原文链接:PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客
相关文章:
【PostgreSQL】系列之 一 用户创建和授权(三)
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的…...
Python连接Hive实例教程
一 Python连接hive环境实例 经在网络查询相关的教程,发现有好多的例子,发现连接底层用的的驱动基本都是pyhive和pyhs2两种第三方库的来连接的 hive,下面将简介windows 10 python 3.10 连接hive的驱动程序方式,开发工具:pycharm …...
Jest和Mocha对比:两者之间有哪些区别?
目录 什么是单元测试? Jest和Mocha介绍 Jest Jest的特点: Jest的使用限制 Mocha Mocha的特点 使用Mocha的限制 Jest和Mocha的全面比较 我们应该使用哪个测试框架? 结论 什么是单元测试? 所谓单元测试,是对软…...
Oracle:merge into用法
文章目录 merge into使用场景merge into语法测试表普通模式 merge使用注意点 merge into MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入 比单独的 update insert 的方式效率要更高,尤…...
【数据结构OJ题】消失的数字
原题链接:https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一:排序遍历(下一个数不等于上一个数1,这个下一个数就是消失的数字)。 时…...
linux 隔离内核
1、 编辑grub gedit /etc/default/grub 2、修改 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash isolcpus1,3"(这里表示1和3两个cpu被隔离,cpu序号从0开始) or GRUB_CMDLINE_LINUX"isolcpus1,3" 3、update sudo update-grub 4、查看…...
IO学习-有名管道
1,要求实现AB进程对话 A进程先发送一句话给B进程,B进程接收后打印 B进程再回复一句话给A进程,A进程接收后打印 重复1.2步骤,当收到quit后,要结束AB进程 运行结果:...
小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(三)
本文主要以SpringBoot微服务架构为基础,提出了前后端分离的MVVM模型,并对其进行了详细的分析以及研究,以此为相关领域的工作人员提供一定的技术性参考。 目录 6 互联网应用开发架构分析 6.1 微服务架构与单体架构 6.1.1 系统更改部署 6.1…...
应用在多媒体手机中的低功率立体声编解码器
多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合,一般是图像、文字、声音等多种结合,所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念,主要是指文字、图形、图像、声音等多种…...
Teams Room视频会议室方案
需求背景: 适合在40平米的会议室参加Teams视频会议,会议桌周围可以坐20人,要求: 1,操作简单,一键入会Teams Room; 2,任何人带上自己的笔记本电脑,可以分享电脑画面&#…...
C# 委托、事件、特性程序
委托和事件 public partial class Form1 : Form { public Form1() { InitializeComponent(); Man man new Man("小明"); Roommate[] roommates { new Roommate("小张"), new Roommate("小朱"), …...
MapTR论文笔记
MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 目的 传统高精地图 通过一些离线的基于 SLAM 的方法生成,需要复杂的流程以及高昂的维护费用。基于 bev 分割的建图方法,缺少向量化 实例级的信息,比如…...
JS进阶-Day4
🥔:流水不争先争滔滔不绝 JS进阶-Day1——点击此处(作用域、函数、解构赋值等) JS进阶-Day2——点击此处(深入对象之构造函数、实例成员、静态成员等;内置构造函数之引用类型、包装类型等) JS进…...
【C语言】初阶完结练习题
🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...
c++类与对象详解
c类与对象详解 对象类方法自定义类型类的特性this类的六个默认成员函数static成员友元内部类 对象 在C中,对象是类的实例。定义对象的语法为: <class_name> object_name;其中,class_name 是定义类时指定的类名,object_nam…...
I/O 函数/缓存和字节流、占位符、getchar(),putchar()
I/O 函数 C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。 缓存和字节流 严格地…...
MySQL日期常见的函数
-- 获取当天日期 -- 2023-06-20 select curdate();-- 获取当天年月日时分秒 select now();-- 日期运算 -- 2024-06-20 17:04:17 select date_add(now(),interval 1 year);-- 日期比较 -- 0 select datediff(now(),now());-- 日期MySQL对于日期类型数据如何查询 -- 获取指定日期…...
Python获取CPU温度
本文的主要目的是演示如何借助 Python 中的 pythonnet 库读取和显示 CPU 温度。 Python获取CPU温度 根据您正在设计的应用程序类型,您可能希望监视运行该程序的机器的资源。 由于多种原因,可能会出现这种情况。 也许您需要您的程序在系统资源达到特定阈…...
后端整理(MySql)
1 事务 1.1 事务ACID原则 原子性(Atomicity) 事务的原子性指的是事务的操作,要么全部成功,要么全部失败回滚 一致性(Consistency) 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…...
HashSet的详细介绍
一、HashSet整体介绍 HashSet 是 Java 中的一个集合类,它实现了 Set 接口,用于存储不重复的元素。它是基于哈希表的数据结构实现的。 HashSet 的特点如下: 不允许存储重复的元素:HashSet 中的元素是唯一的,如果尝试…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
