当前位置: 首页 > news >正文

postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别

前言:

postgresql做为一个比较复杂的关系型的重型数据库,不管是安装部署,还是后期的运行维护,都还是有比较多的细节问题需要引起关注。

例如,用户权限的合理分配,那么,什么是权限的合理分配呢? 自然是权限的最小化原则,也就是说每个用户能够完成其权限范围内的工作,而不会由于黑客攻击,漏洞等原因造成安全方面的危险。

在写这篇文章之前,仅仅是对于一些普通用户简单的随便赋权就完事了,而这样的管理工作显然是不够的,因此,本文将对postgresql数据库内的用户赋权和去权做一个相对完整的总结,并通过示例说明 usage权限和select权限的不同。

一,

用户的权限有哪些?

SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。
INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPY FROM进行数据的插入。
UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。
DELETE:该权限允许对表或是视图进行删除数据的操作。
TRUNCATE:允许对表进行清空操作。
REFERENCES:允许给参照列和被参照列上创建外键约束。
TRIGGER:允许在表上创建触发器。
CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;对于表空间,允许把表或是索引指定到对应的表空间上。
CONNECT:允许用户连接到指定的数据库上。
TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。
EXECUTE:允许执行某个函数。
USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象(不包括授权后的新建对象);对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。
ALL PRIVILEGES:表示一次性给予可以授予的权限。

OK,增删改查也就是select ,update,insert,delete  和usage应该是可以归于一类的,而select和usage是十分相似的,至少在schema下,两者是基本雷同的,但需要注意的是,授权后的新建对象,比如新建表,usage是无权查询的,而select显然是不存在此类问题的。

二,

正确的只读用户赋权

1,

第一种赋权

usage---使用权+select查询权

先创建相关schema,名为mytest,相关role,名为test

test=# \c test
You are now connected to database "test" as user "postgres".
test=# create schema mytest;
CREATE SCHEMA
test=# \duList of rolesRole name      |                         Attributes                         | Member of 
--------------------+------------------------------------------------------------+-----------drmc               |                                                            | {}pg1                | Superuser, Create role, Create DB, Replication, Bypass RLS | {}pms30              | Superuser, Create role, Create DB, Replication, Bypass RLS | {}postgres           | Superuser                                                  | {}postgres_exporter  |                                                            | {}postgres_exporter1 |                                                            | {}power_common       |                                                            | {}power_tf           |                                                            | {}zsk                |                                                            | {}
test=# create user test with password '123456';
CREATE ROLE

赋权:

test=# grant USAGE on SCHEMA mytest to test;
GRANT
test1=> grant SELECT on ALL tables in schema mytest to test;

测试就不演示了,只是需要注意一点,要赋权两个,usage和select,两者缺一不可,也就是说必须是两个命令!!!!!

OK,以上是用户test赋权select到test数据库下的mytest这个schema,下面为了继续测试,删除test这个用户。

2,

强制删除已赋权过的用户

OK,删除的时候报错了,这就让人比较无语了,报错说的是名为test的数据库有5个对象依赖于用户test,不过还是有解决办法的

postgres=# drop user test;
2023-08-09 01:15:34.031 CST [14975] ERROR:  role "test" cannot be dropped because some objects depend on it
2023-08-09 01:15:34.031 CST [14975] DETAIL:  5 objects in database test
2023-08-09 01:15:34.031 CST [14975] STATEMENT:  drop user test;
ERROR:  role "test" cannot be dropped because some objects depend on it
DETAIL:  5 objects in database test

强制删除:

需要reassign和drop owner by以及drop user  三条命令,缺一不可。

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# \dn
List of schemasName  | Owner 
--------+-------mytest | testpublic | pg1
(2 rows)test=# REASSIGN OWNED BY test TO postgres;
REASSIGN OWNED
test=# \dnList of schemasName  |  Owner   
--------+----------mytest | postgrespublic | pg1
(2 rows)
test=# drop owned BY test cascade;
NOTICE:  drop cascades to 4 other objects
DETAIL:  drop cascades to table mytest.dept
drop cascades to table mytest.emp
drop cascades to table mytest.bonus
drop cascades to table mytest.salgrade
DROP OWNED

OK,查询test这个用户是否删除:

可以看到,确实没有了,有强迫症的人士就非常舒服了。

但特别需要注意,该强制删除用户因为是级联删除,因此,很大概率会把依赖的schema和table都删除,所以此方式强制删除用户需要提前备份,防止发生不测

test1=# \du+List of rolesRole name      |                         Attributes                         | Member of | Description 
--------------------+------------------------------------------------------------+-----------+-------------drmc               |                                                            | {}        | pg1                | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        | pms30              | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        | postgres           | Superuser                                                  | {}        | postgres_exporter  |                                                            | {}        | postgres_exporter1 |                                                            | {}        | power_common       |                                                            | {}        | power_tf           |                                                            | {}        | zsk                |                                                            | {}        | 

3,

第二种赋权

grant select+ owner

test=# create user test with password '123456';
CREATE ROLE
test=# \c
You are now connected to database "test" as user "postgres".
test=# grant SELECT on ALL tables in schema mytest to test;
GRANT
test=# set search_path to mytest ;
SET
test=# alter schema mytest owner to test;
ALTER SCHEMA

测试:

test=> \c
You are now connected to database "test" as user "test".test=> set search_path to mytest ;
SET
test=> \dpAccess privilegesSchema |   Name   | Type  |     Access privileges     | Column privileges | Policies 
--------+----------+-------+---------------------------+-------------------+----------mytest | bonus    | table | postgres=arwdDxt/postgres+|                   | |          |       | test=r/postgres           |                   | mytest | dept     | table | postgres=arwdDxt/postgres+|                   | |          |       | test=r/postgres           |                   | mytest | emp      | table | postgres=arwdDxt/postgres+|                   | |          |       | test=r/postgres           |                   | mytest | salgrade | table | postgres=arwdDxt/postgres+|                   | |          |       | test=r/postgres           |                   | 
(4 rows)test=> \dn
List of schemasName  | Owner 
--------+-------mytest | testpublic | pg1
(2 rows)test=> set search_path to mytest ;
SET
test=> select * from emp;empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno 
-------+--------+-----------+------+------------+---------+---------+--------7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     207499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     307521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     307566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     207654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     307698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     307782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     107788 | SCOTT  | ANALYST   | 7566 | 0087-04-19 | 3000.00 |         |     207839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     107844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     307876 | ADAMS  | CLERK     | 7788 | 0087-05-23 | 1100.00 |         |     207900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     307902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     207934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     10
(14 rows)

相关文章:

postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别

前言: postgresql做为一个比较复杂的关系型的重型数据库,不管是安装部署,还是后期的运行维护,都还是有比较多的细节问题需要引起关注。 例如,用户权限的合理分配,那么,什么是权限的合理分配呢…...

【题解】旋转数组的最小数字、比较版本号

文章目录 旋转数组的最小数字比较版本号 旋转数组的最小数字 题目链接&#xff1a;旋转数组的最小数字 解题思路1&#xff1a;遍历求最小值 代码如下&#xff1a; int minNumberInRotateArray(vector<int> rotateArray) {int min rotateArray[0];for(auto const&…...

springboot系统内多级调用报错日志输出顺序

忘记,模糊,故专门验证下 比如方法1调用方法2 方法2又调用方法3 方法3报错 那么报错日志中哪个方法所在行先打印出来? 直接上测试代码 package pers.wwz.study.exception.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.Requ…...

django——配置 settings.py 及相关参数说明

3. 配置 settings.py 及相关参数说明 3.1 配置setting.py文件 设置setting.py文件 加入安装的库 apps.erp_test, rest_framework, django_filters, drf_spectacular,加入新增的APP users启动项目 # 运行项目先执行数据库相关操作&#xff0c;再启动 django 项目 python manag…...

OptaPlanner笔记1

1.1 什么是OptaPlanner 每个组织都面临规划问题&#xff1a;为产品或服务提供有限的受约束的资源&#xff08;员工、资产、时间和金钱&#xff09;。OptaPlanner用来优化这种规划&#xff0c;以实现用更少的资源来做更多的业务。 这被称为Constraint Satisfaction Programming…...

github 镜像站及下载加速网址

1、提供常用的镜像网址&#xff08;记住千万别登录账号&#xff09;&#xff1a; https://github.com.cnpmjs.org https://hub.fastgit.org https://hub.nuaa.cf/ https://hub.yzuu.cf/ https://hub.njuu.cf/上面的网址是一个克隆版的Github&#xff0c;上面的镜像网站内容跟G…...

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…...

c++病毒/恶搞代码大全( 上 )

注&#xff1a;以下代码应勿用于非法&#xff08;Dev-c5.11实测可用&#xff09; 1: 效果:无限生成cmd 解决方法&#xff1a;关闭程序即可 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {while(1)system("start cmd"…...

【数学建模】清风数模更新5 灰色关联分析

灰色关联分析综述 诸如经济系统、生态系统、社会系统等抽象系统都包含许多因素&#xff0c;系统整体的发展受各个因素共同影响。 为了更好地推动系统发展&#xff0c;我们需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是积极的&#xff0c;哪些是消极的…...

Windows下运行Tomcat服务时报GC Overhead Limit Exceeded

根本原因是在新建Tomcat作为Windows服务时&#xff0c;系统默认设置的堆内存太小了&#xff0c;我们打开/bin/service.bat文件&#xff0c;将如下图所示的默认值改大一些就好了 if "%JvmMs%" "" set JvmMs512 if "%JvmMx%" "" set J…...

OpenCV实例(八)车牌字符识别技术(一)模式识别

车牌字符识别技术&#xff08;一&#xff09;模式识别 1.模式识别流程2. 模式识别方式 影响并导致汽车牌照内字符出现缺损、污染、模糊等情况的常见因素有照相机的性能、采集车辆图像时光照的差异、汽车牌照的清洁度等。为了提高汽车牌照字符识别的准确率&#xff0c;本节将把英…...

OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

霍夫线检测 vector<Vec2f> lines1;HoughLines(canny_mat, lines1, 1, CV_PI / 180.0,90 );//45可以检测里面两条线 80检测出外边两条线 定义存放输出线的向量 此向量输出有<距离&#xff0c;角度> 因为检测的原理就是在变换霍夫空间里面去检测的&#xff0c;这里可…...

Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

在使用npm uninstall -g appium卸载appium的过程中报错 Error: EACCES: permission denied, rename /usr/local/lib/node_modules/appium -> /usr/local/lib/node_modules/.appium-cfBVovI6 npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/lib/n…...

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…...

牛客 松鼠回家(二分答案+最短路)

题目描述 松鼠宝宝由于贪玩去了一个具有n个点和m条边的无向图中&#xff0c;现在松鼠宝宝仅有h点体力&#xff0c;所有的边经过一次后会消耗部分体力&#xff0c;同时松鼠爸爸为了惩罚贪玩的松鼠宝宝&#xff0c;每到一个点会扣除部分松果&#xff08;起点的松果也会扣除&#…...

Mysql in 查询的奇怪方向

Mysql in 查询的奇怪方向 关于表字段存储的数据为 num1,num2,num3时, 还要通过多个num1,num2入参针对该字段进行查询 建表语句 CREATE TABLE test (test_ids varchar(100) DEFAULT NULL COMMENT 保存ids 以逗号分隔 ) ENGINEInnoDB;数据项 查询语句 SELECT test_ids FROM t…...

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…...

后端常使用的中间件知识点--持续更新

类型难度mysqlmysql中SQL优化&#xff1a;多角度分析包学包会&#xff0c;sql优化全过程&#xff0c;刨根分析redis多角度剖析redis数据结构及底层实现原理、应用场景MQ简单大体说明RabbitMQ的使用&#xff08;简单版&#xff09;mybatis使用JDBC的批量插入百万数据要多少秒一遍…...

非科班的大家如何顺滑转码

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f;请来聊聊你的看法和观点&#xff0c;我本身是信息与计算科学专业&#xff0c;周围的同学有不少也是被这个名字“骗过来的”&#xff0c;看这个名字都以为是计算机相关专业&…...

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...