POSTGRESQL 如何用系统函数来诊断权限问题

3fb93c4c1a0334c5a6f8aeb39b01b06d.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共1200人左右 1 + 2 + 3)新人会进入3群

开发人员很少关注于数据库系统的权限,而POSTGRESQL 相对于MYSQL来说,他的权限是复杂的,尤其在一些规范的企业,对于权限的要求很高,而随时掌握账号对于数据库OBJECTS的权限的状态,在很多项目中是乙方需要知道该怎么做的。

我们从上到下,一一给大家进行演示,你的用户组需要针对PG中不同的数据库掌握权限,那么那些账号有那些数据库的权限需要进行一个判断。

我们创建一个账号,关于这个账号在什么权限都没有,从下面的函数可以判断,什么都没有的权限的账号可以创建临时表,如果减少用户的名的传参,则为当前的账号是否有对于数据库权限的验证。

d1557ba361f9e7788097ef8b370f1b39.png

25b38e594a4fa5ff3adbb046bfa9741e.png

postgres=# select has_database_privilege('test','postgres','temp');
 has_database_privilege 
------------------------
 t
(1 row)


postgres=# 
postgres=# select has_database_privilege('test','postgres','temporary');
 has_database_privilege 
------------------------
 t
(1 row)


postgres=# 
postgres=# select has_database_privilege('test','postgres','create');
 has_database_privilege 
------------------------
 f
(1 row)

这里我们继续针对POSTGRESQL 中的某个SCHEMA 进行判断, 一个具有OWNER test_schema的账号,具有创建和usageschema的权限

1b4fb59ef137f98048f59d521c008075.png

dvdrental=# 
dvdrental=# select has_schema_privilege('test','test_schema','create');
 has_schema_privilege 
----------------------
 t
(1 row)


dvdrental=# select has_schema_privilege('test','test_schema','usage');
 has_schema_privilege 
----------------------
 t
(1 row)

a

09c78a10f2f1f9228990bc2b6fdad85c.png

针对表的操作进行权限的判断

dvdrental=# 
dvdrental=# select has_table_privilege('test','TEST_TABLE','select');
 has_table_privilege 
---------------------
 f
(1 row)


ge('test','TEST_TABLdvdrental=# select has_table_privilege('test','TEST_TABLE','insert');
 has_table_privilege 
---------------------
 f
(1 row)


dvdrental=# select has_table_privilege('test','TEST_TABLE','update');
 has_table_privilege 
---------------------
 f
(1 row)


dvdrental=# select has_table_privilege('test','TEST_TABLE','delete');
 has_table_privilege 
---------------------
 f
(1 row)


dvdrental=# select has_table_privilege('test','TEST_TABLE','references');
 has_table_privilege 
---------------------
 f
(1 row)

73d72e98b5b832179423e384b2d77838.png

我们在创建了一个新的schema 并且在新的schema中创建的了表,但是test 用户对于这个数据库下的schema 是owner那么我们创建的这个表test用户是否有权限呢。

dvdrental=# select has_table_privilege('test','test_schema.TEST_TABLE','select');
 has_table_privilege 
---------------------
 f
(1 row)

我们可以看到,test账号对于test_schema 下的表 TEST_TABLE 是没有权限的,我们来验证一遍,通过 test 登陆到系统中,来访问这个表。

c634379dedc3d4f17e181d0522664492.png

a38d149a2cb25d2b2a9b6d3c639a3c34.png

在赋予权限后,我们再次通过验证的函数来进行判断,的确赋予权限了。

dvdrental=# select has_table_privilege('test','test_schema.TEST_TABLE','select');
 has_table_privilege 
---------------------
 t
(1 row)


dvdrental=# select has_table_privilege('test','test_schema.TEST_TABLE','update');
 has_table_privilege 
---------------------
 t
(1 row)


dvdrental=# select has_table_privilege('test','test_schema.TEST_TABLE','insert');
 has_table_privilege 
---------------------
 t
(1 row)


dvdrental=# select has_table_privilege('test','test_schema.TEST_TABLE','references');
 has_table_privilege 
---------------------
 f
(1 row)

那么如果针对表中的权限是需要判定多种的权限如何进行操作

38c3b6ca5a9c5bcb5478e37144e87aa9.png

select has_table_privilege('test','test_schema.TEST_TABLE','insert,select,update,update with grant option');

最后关于关于开发经常提到的关于函数和存储过程方面的权限问题,我们创建一个函数,一个存储过程。

cf25e6fa25163e746d94f66f0ec4967d.png

下面的我们通过has_function_privilege 函数来对test 用户进行执行此函数权限的确认,得到的结果是YES, test 账号对于这个函数是有相关的执行权限的。

fab553419bdf844192239ccdab3b00a4.png

同样的,我们创建一个存储过程,我们还是使用上面的函数来判断

522ca902575fcd42a6738bba5ba85181.png

SELECT has_function_privilege('test', 'public.insert_data(varchar)', 'execute');

bfb899a9c601806b42f7438585b818b7.png

同样使用判断函数权限的方式用在判断存储过程中也是一样的有效。

在postgresql 的使用中,尤其乙方在服务甲方的情况下,很多初级的问题尤其权限都需要介入和解决,以及判断,那么自动化的方式来进行判断对于乙方是非常重要的。

下面的脚本,抛砖引玉,通过相关的函数,将schema下的表的权限进行全面的打印。

SELECT 
     tablename
     ,usename
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del
FROM
(SELECT * from pg_tables
WHERE schemaname = 'public') as tables
,(SELECT * FROM pg_user) AS users;

d66780c21498349a67a4a549565138a1.png

18eb0e6c540d64f04428df88538bbc1a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/85472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

更改计算机睡眠时间

控制面板–>系统和安全–>电源选项下的更改计算机睡眠时间 如果关闭显示器时间小于使计算机进入睡眠状态时间,时间先到达关闭显示器时间,显示器关闭,这时电脑还在正常工作状态。如果此时敲击键盘显示器出现画面,无需输入密…

opencv 进阶15-检测DoG特征并提取SIFT描述符cv2.SIFT_create()

前面我们已经了解了Harris函数来进行角点检测,因为角点的特性,这些角点在图像旋转的时候也可以被检测到。但是,如果我们放大或缩小图像时,就可能会丢失图像的某些部分,甚至有可能增加角点的质量。这种损失的现象需要一…

存储系统性能优化中IOMMU的作用是什么?

一、IOMMU原理 IOMMU(Input/Output Memory Management Unit)是一种用于管理计算机内存的技术,它允许将物理内存映射到虚拟地址空间。IOMMU通过使用专用的硬件来管理和优化内存访问,从而提高系统性能和稳定性。本文将详细介绍IOMMU的原理,并介绍一些应用案例和典型的问题解…

Spring6.0官方文档示例:(28)多种方式添加BeanPostProcessor

一、定义三个BeanPostProcessor package cn.edu.pku;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component;Component public class MyScannedBeanPostPr…

微信小程序列表加载更多

概述 基于小程序开发的列表加载更多例子。 详细 一、前言 基于小程序开发的列表加载更多例子。 二、运行效果 运行效果(演示的小视频,点击播放即可) 三、实现过程 总体思路如何: 1、通过scroll-view组件提供的bindscroll方法…

2023 网络建设与运维 X86架构计算机操作系统安装与管理题解

任务描述: 随着信息技术的快速发展,集团计划2023年把部分业务由原有的X86架构服务器上迁移到ARM架构服务器上,同时根据目前的部分业务需求进行了部分调整和优化。 一、X86架构计算机操作系统安装与管理 1.PC1系统为ubuntu-desktop-amd64系统(已安装,语言为英文),登录用户…

Golang Gorm 更新字段 save update updates

更新和删除操作的前提条件都是要在找到数据的情况下,先要查询到数据才可以做操作。 更新的前提的先查询到记录,Save保存所有字段,用于单个记录的全字段更新它会保控所有字段,即使零值也会保存。 在更新和删除之前,要利…

记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic

由于相机实时在线运行需要ROS,但Ubuntu22.04只支持ROS2,于是重装Ubuntu20.04。上一篇文章跑通的是官方版本的ORB_SLAM2,不支持点云显示。高翔修改版本支持RGB-D相机的点云显示功能。 高翔修改版本ORB_SLAM2:https://github.com/ga…

天翼物联、汕头电信与汕头大学共建新一代信息技术与数字创新(物联网)联合实验室

近日,在工业和信息化部和广东省人民政府共同主办的2023中国数字经济创新发展大会上,天翼物联、汕头电信与汕头大学共建“新一代信息技术与数字创新(物联网)”联合实验室签约仪式举行。汕头大学校长郝志峰、中国电信广东公司总经理…

视频云存储/安防监控EasyCVR视频汇聚平台分发rtsp流时,出现“用户已过期”提示该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…

主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选? 网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述: 对啦&…

PCI9054入门1:硬件引脚定义、时序、FPGA端驱动源码

文章目录 1:PCI9054的FPGA侧(local侧引脚定义)2:PCI9054的C模式下的读写时序3:FPGA代码部分具体代码: 1:PCI9054的FPGA侧(local侧引脚定义) 而PCI9054的本地总线端的主要…

全国城市内涝排涝模拟技术及在市政、规划设计中应用教程

详情点击链接:全国城市内涝排涝模拟技术及在市政、规划设计中应用教程 一,数据准备 通过标准化的步骤,利用CAD数据、GIS数据,在建模的不同阶段发挥不同软件的优势,实现高效的数据处理、准确的参数赋值、模型的快速建…

【TA 挖坑03】雾效 | 透光材质 | Impostor | 厚度转球谐

仍旧是记录下半年想要做的东西,很有趣,实现“一团雾效” “面片也有立体感” 等等效果的一些技术上的方法。 仅粗浅记录,保证之后自己填坑的时候看得懂就行! 透光 -> 透光材质ShadingModel 《永劫无间》透光材质的渲染&…

matlab面向对象

一、面向对象编程 1.1 面向过程与面向对象 区别: 面向过程的核心是一系列函数,执行过程是依次使用每个函数面向对象的核心是对象(类)及其属性、方法,每个对象根据需求执行自己的方法以解决问题 对象:单个…

nginx代理webSocket链接,webSocket频繁断开重连

一、场景 1、使用nginx代理webSocket链接,消息发送和接收都是正常的,但webSocket链接会频繁断开重连 2、如果不使用nginx代理则一切正常 3、程序没有做webSocket心跳处理 如下图 二、nginx代理配置 upstream cloud_ass {#ip_hash;server 192.168.1.…

MyBatis的核心技术掌握,简单易懂

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛?? 三.MyBatis 中的结果映射 1. resultType: 2. resultMap: ---问题 ---…

蓝奥声智能工业安全用电监测与智慧能源解决方案

能源管理变得越来越重要。如今,能源成本已成为国内预算的核心因素,因此用电监控对大多数现代企业来说都很重要。许多企业在日常能源消耗监控中面临着一些挑战,因为它们的规模庞大,基础设施多样化,灵活性低,…

k8s ingress (二)

k8s ingress (二) Ingress介绍 在前面课程中已经提到,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点: NodePort方式的缺点是会占用很多集群机器的端口&#xff0…