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

news2024/12/24 8:38:34

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.coloradmin.cn/o/916818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H36M VS 3DPW datasets

1采集设备方面 H36M使用了高精度的多视角摄像机动态捕捉系统获得了非常准确和连贯的3D关节坐标标注。 3DPW使用了单目摄像机与IMU的复合传感系统进行采集,存在一定程度的标注噪声。 2场景环境方面 H36M主要针对室内定向动作,背景单一简洁。 3DPW重点是室外复杂环境中人的自…

第九章,社区侧栏

9.1添加实战课程 <template><div v-if="slides.length" class="carousel slide" @mouseover="stop" @mouseout="play"><div class="carousel-inner"><transitionenter-active-class="animated…

测试基础|一文了解,这5种不同类别的软件测试工具都有啥用

介绍&#xff1a;对于任何希望确保其数字产品的质量和性能的企业来说&#xff0c;软件测试工具都是宝贵的资产。从桌面应用程序到Web平台&#xff0c;软件测试工具提供了一整套功能&#xff0c;可帮助开发人员在潜在问题成为代价高昂的问题之前识别并解决它们。彻底的测试变得至…

Filter+Listener

文章目录 1. Filter1.1 Filter快速入门1.2 Filter执行流程1.3 Filter拦截路径1.4 案例 2. Listener JavaWeb 三大组件 Servlet Servlet 是在服务器端执行的 Java 类&#xff0c;用于处理客户端请求和生成响应。它可以接收HTTP请求并返回HTTP响应&#xff0c;通常用于处理Web应用…

DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用

查看原文>>>DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要…

“赛意力量SNP”南京站深探智改数转新境界 精典回顾

7月28日&#xff0c;“赛意力量全国行”来到中国科技的创新中心之一&#xff0c;同样也是专精特新“小巨人”成林的城市——江苏南京&#xff0c;以“芯片”为纽带&#xff0c;聚焦高科技企业未来发展的大方向&#xff0c;带领嘉宾深度挖掘智改数转领域的新思考与新路径。通过沙…

WordArt Designer:基于用户驱动与大语言模型的艺术字生成

AIGC推荐 FaceChain人物写真开源项目&#xff0c;支持风格与穿着自定义&#xff0c;登顶github趋势榜首&#xff01; 前言 本文介绍了一个基于用户驱动&#xff0c;依赖于大型语言模型(LLMs)的艺术字生成框架&#xff0c;WordArt Designer。 该系统包含四个关键模块:LLM引擎、…

OpenCV中QR二维码的生成与识别(CIS摄像头解析)

1、QR概述 QR(Quick Response)属于二维条码的一种&#xff0c;意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低&#xff0c;还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的&#xff0c;在移动支付、电影票、…

接口经典题目

​ White graces&#xff1a;个人主页 &#x1f649;专栏推荐:《Java入门知识》&#x1f649; &#x1f649; 内容推荐:继承与组合&#xff1a;代码复用的两种策略&#x1f649; &#x1f439;今日诗词:人似秋鸿来有信&#xff0c;事如春梦了无痕。&#x1f439; 目录 &…

7个好用的网络写作神器,助你提升写作能力

在如今数字化时代&#xff0c;网络写作已经成为许多人日常工作和创作的一部分。为了提高写作效率和质量&#xff0c;许多网络写作神器应运而生。本文将介绍7个优秀的网络写作工具&#xff0c;帮助你提升写作能力&#xff0c;提高创作效率&#xff0c;实现卓越的文笔。 …

(4)将固件加载到没有ArduPilot固件的主板上

文章目录 前言 4.1 下载驱动程序和烧录工具 4.2 下载ArduPilot固件 4.3 使用测试版和开发版 4.3.1 测试版 4.3.2 最新开发版本 4.4 将固件上传到自动驾驶仪 4.5 替代方法 4.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本&#xff08;Copter-3.6, Pl…

HTML总结1【转】

以下内容转载和参考自&#xff1a;w3school的HTML学习内容&#xff0c;HTML 简介 。 一、概述 HTML不是一种编程语言&#xff0c;它是超文本标记语言 (Hyper Text Markup Language)&#xff0c;使用标记标签来描述网页内容。HTML标签是由尖括号包围的关键词&#xff0c;标签通…

MacBook怎么安装使用Windows软件和虚拟机?

作为一名MacBook用户&#xff0c;你可能会发现有些软件和应用程序只适用于Windows操作系统&#xff0c;但别担心&#xff01;今天我们将介绍两种方法&#xff0c;让你的MacBook轻松安装Windows软件和运行Windows虚拟机&#xff0c;为你的工作、学习和娱乐任务带来更多可能性。下…

利用TLS反调试

利用TLS反调试 今天说一下利用TLS提供的静态绑定回调函数来反调试 原理 首先说一下tls为什么可以反调试 一般我们调试时候是断点在oep&#xff08;pe文件的程序入口点&#xff09;上的&#xff0c;而tls回调函数会在加载可执行程序之前调用 首先简单描述一下程序的加载过程 …

solidity0.8.0的应用案例10:可升级合约

这个案例是代理合约的实际操作&#xff0c;代理合约实现了逻辑和数据的分离&#xff0c;就可以实现在生产环境中&#xff0c;轻松升级合约&#xff0c;这就是一个如何实际升级合约的案例。 实现一个简单的可升级合约&#xff0c;它包含3个合约&#xff1a;代理合约&#xff0c;…

Android app 打包发布之build.gradle 配置

配置描述&#xff1a;在build.gradle(:app)文件中配置 包含以下几个部分&#xff1a; plugins&#xff1a;引入的工具android&#xff1a;主要配置都在这个里面dependencies&#xff1a;依赖android.applicationVariants.all&#xff1a;打包输出路径和名称 看android配置&a…

Linux下的Shell编程——文本处理工具(五)

前言&#xff1a; Linux Shell是一种基本功&#xff0c;由于怪异的语法加之较差的可读性&#xff0c;通常被Python等脚本代替。既然是基本功&#xff0c;那就需要掌握&#xff0c;毕竟学习Shell脚本的过程中&#xff0c;还是能了解到很多Linux系统的内容。 Linux脚本大师不是…

Matplotlib学习笔记

Matplotlib数据可视化库 jupyter notebook优势 画图优势&#xff0c;画图与数据展示同时进行。数据展示优势&#xff0c;不需要二次运行&#xff0c;结果数据会保留。 Matplotlib画图工具 专用于开发2D图表以渐进、交互式方式实现数据可视化 常规绘图方法 子图与标注 想要…

Java使用MyBatis、JDBC批量插入数据

使用MyBatis、JDBC做大量数据插入 准备 表结构 CREATE TABLE tb_users (id varchar(255) NOT NULL,name varchar(100) DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;MyBatis配置文件 <?xml version"1.0" enc…

Wireshark数据抓包分析之ARP协议

一、实验目的&#xff1a; 通过wireshark的数据抓包了解这个ARP协议的具体内容 二、预备知识: 1.Address Resolution Protocol协议&#xff0c;就是通过目标IP的值&#xff0c;获取到目标的mac地址的一个协议 2.ARP协议的详细工作过程&#xff0c;下面描述得非常清晰&#xff…