一文全搞懂postgresql的角色

author author     2022-12-05     559

关键词:

角色和用户的使用

举个例子,创建一个只读用户和两个读写用户


通用前提操作

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

REVOKE ALL ON DATABASE mydatabase FROM PUBLIC;


创建只读角色

CREATE ROLE readonly;

GRANT CONNECT ON DATABASE mydatabase TO readonly;

GRANT USAGE ON SCHEMA myschema TO readonly;

GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO readonly;

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO readonly;


创建读写角色

CREATE ROLE readwrite;
GRANT CONNECT ON DATABASE mydatabase TO readwrite;
GRANT USAGE, CREATE ON SCHEMA myschema TO readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT USAGE ON SEQUENCES TO readwrite;

用户创建以及赋予角色权限

CREATE USER reporting_user1 WITH PASSWORD some_secret_passwd;
CREATE USER reporting_user2 WITH PASSWORD some_secret_passwd;
CREATE USER app_user1 WITH PASSWORD some_secret_passwd;
CREATE USER app_user2 WITH PASSWORD some_secret_passwd;

GRANT readonly TO reporting_user1;
GRANT readonly TO reporting_user2;
GRANT readwrite TO app_user1;
GRANT readwrite TO app_user2;


默认角色

pg_read_all_settings

读取所有配置变量,即使是那些通常只对超级用户可见的配置变量。

postgres=# \\c postgres user2;
You are now connected to database "postgres" as user "user2".
postgres=> show data_directory;
ERROR: must be superuser or a member of pg_read_all_settings to examine "data_directory"
postgres=>

postgres=> \\c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# grant pg_read_all_settings to user2;
GRANT ROLE

postgres=# \\c postgres user2;
You are now connected to database "postgres" as user "user2".
postgres=> show data_directory;
data_directory
----------------
/opt/pgdata
(1 row)

pg_read_all_stats

读取所有pg_stat_*视图并使用各种与统计相关的扩展,即使是那些通常只对超级用户可见的扩展。​

postgres=> select * from pg_stat_activity;
<insufficient privilege>


grant pg_read_all_stats to user2;

​pg_stat_scan_tables

​执行可能在表上获取ACCESS SHARE锁的监视函数,可能需要很长时间。​


​pg_monitor

读取/执行各种监视视图和函数。该角色是pg_read_all_settings、pg_read_all_stats和pg_stat_scan_tables的成员。​

​pg_signal_backend

​通知另一个后端取消查询或终止其会话。但是杀不了超级用户的会话


​pg_read_server_files

允许从数据库可以通过COPY和其他文件访问功能访问的服务器上的任何位置读取文件。


​pg_write_server_files

允许对服务器上数据库可以通过COPY和其他文件访问功能访问的任何位置的文件进行写入。


​pg_execute_server_program

允许作为数据库运行的用户在数据库服务器上执行程序,使用COPY和其他允许执行服务器端程序的函数。​


面试官常问的垃圾回收器,这次全搞懂(代码片段)

本文已被Github仓库收录https://github.com/silently9527/JavaCore前言前几天写了一篇《JVM性能调优实战:让你的IntelliJIdea纵享丝滑》,其中有对GC垃圾回收器的选择尝试,本篇我们就来详细的看看JVM中常见的垃圾回收器有哪些以及每个垃圾... 查看详情

一文让你彻底搞懂多线程(代码片段)

如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其... 查看详情

一文搞懂sae日志采集架构(代码片段)

日志,对于一个程序的重要程度不言而喻。无论是作为排查问题的手段,记录关键节点信息,或者是预警,配置监控大盘等等,都扮演着至关重要的角色。是每一类,甚至每一个应用程序都需要记录和查看... 查看详情

一文搞懂sae日志采集架构(代码片段)

日志,对于一个程序的重要程度不言而喻。无论是作为排查问题的手段,记录关键节点信息,或者是预警,配置监控大盘等等,都扮演着至关重要的角色。是每一类,甚至每一个应用程序都需要记录和查看... 查看详情

一文搞懂python列表list的截取

〝古人学问遗无力,少壮功夫老始成〞一文搞懂python列表list的截取,列表作为python中最常用的数据类型,如果搞懂它,将会对你学习python有特别大的好处,如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示... 查看详情

一文搞懂==equals和hashcode

...de(),在使用HashMap或HashSet的时候可能会出现什么情况?​一文搞懂​==和equals()的区别是什么?​先来看看 查看详情

一文搞懂jsbridge的运行机制

我司的APP是一个典型的混合开发APP,内嵌的都是前端页面,前端页面要做到和原生的效果相似,就避免不了调用一些原生的方法,jsBridge就是js和原生通信的桥梁,本文不讲概念性的东西,而是通过分析一下我司项目中的jsBridge源... 查看详情

一文搞懂springboot启动原理

SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.c... 查看详情

一文搞懂java线程中断

在之前的一文《如何"优雅"地终止一个线程》中详细说明了stop终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分享的——线程中断。下面的这断代码大家应该再熟... 查看详情

一文搞懂springboot定时任务

Introduction在springboot中自带了一个轻量级的调度系统。如果我们希望在特定的时间或者以特定的时间间隔完成某些任务,那么它完全能够满足需求,不需要再额外引入像Quartz这种略显沉重的调度框架。下面我们就来介绍springboot中@... 查看详情

一文搞懂javascript垃圾回收机制

一文搞懂JavaScript垃圾回收机制(GC)堆和栈垃圾回收确定内存需要被回收的方法确定内存被回收后,需要用的垃圾回收算法在这之前首先应该搞明白堆和栈的知识堆和栈栈:JavaScript中的基本数据类型都是存在栈中... 查看详情

一文搞懂web端登录过程(代码片段)

一文搞懂web端登录过程无状态HTTP协议session和cookiecookie(存放在客户的浏览器上)session(存放在服务器端)session和cookie的区别token登录过程token验证在了解登陆过程的原理前,应该先弄清楚几个概念无状态HTTP... 查看详情

一文搞懂:adaboost及手推算法案例

boostingBoosting算法的特点在于:将表现一般的弱分类器通过组合变成更好的模型。代表自然就是我们的随即森林了。GBDT和Adaboost是boost算法中比较常见的两种,这里主要讲解Adaboost。AdaboostAdaboost算法的核心就是两个权重。对于数据... 查看详情

一文搞懂java线程中断

下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。try{Thread.sleep(3000);}catch(InterruptedExceptione){e.printStackTrace();}此时线程被打断后,代码会继续... 查看详情

一文搞懂python列表list的截取(代码片段)

〝古人学问遗无力,少壮功夫老始成〞一文搞懂python列表list的截取,列表作为python中最常用的数据类型,如果搞懂它,将会对你学习python有特别大的好处,虽然基础,但是夯实基础,是你成功的阶梯哦... 查看详情

一文搞懂python列表list的截取(代码片段)

〝古人学问遗无力,少壮功夫老始成〞一文搞懂python列表list的截取,列表作为python中最常用的数据类型,如果搞懂它,将会对你学习python有特别大的好处,虽然基础,但是夯实基础,是你成功的阶梯哦... 查看详情

一文搞懂hmm(隐马尔可夫模型)

本文转自于:http://www.cnblogs.com/skyme/p/4651331.html隐马尔可夫模型(HiddenMarkovModel,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进... 查看详情

java基础-一文搞懂位运算

  在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+、-、*、/、%)、关系运算(<、>、<=、>=、==、!=)和逻辑运算(&&、||、!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来... 查看详情