PG 权限实例

如果角色已经存在, 可以采用如下方法进行删除

psql -U pgsql -d postgresreassign owned by r_read to pgsql;
drop owned by r_read;
drop user if exists r_read;reassign owned by r_read_write to pgsql;
drop owned by r_read_write;
drop user if exists  r_read_write;reassign owned by u01 to pgsql;
drop owned by u01;
drop user if exists  u01;reassign owned by u02 to pgsql;
drop owned by u02;
drop user  if exists u02;drop database if exists test;

权限实例

create database test template=template0 encoding='UTF8' locale='C';
revoke create on schema public from public;\c test pgsql
drop table if exists t1;
drop table if exists t2;create table t1(id int, name varchar);
create table t2(id int, name varchar);
insert into t1 values(1,'a'),(2,'b');
insert into t2 values(1,'a'),(2,'b');select * from t1;
select * from t2;-- 创建只读角色
create role r_read;
grant select on all tables in schema public to r_read;
ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to r_read;-- 创建读写角色
create role r_read_write;
grant select, insert,update,delete  on all tables in schema public to r_read_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select, insert, update, delete  on tables to r_read_write;-- 创建只读用户
create user u01; 
grant r_read to u01;-- 对于未来创建的表也授予 select 权限-- 创建读写用户
create user u02; 
grant r_read_write to u02;\c test u01
select * from t1;
select * from t2;
insert into t1 values(3,'c'); -- 报错才是正常的\c test u02
select * from t1;
select * from t2;
insert into t1 values(3,'c');
insert into t2 values(3,'c');\c test pgsql
create table t3(id int);
insert into t3 values(1);\c test u01
select * from t3;
insert into t3 values(2);\c test u02 
select * from t3;
insert into t3 values(2);  -- 可以正常插入# 实操
```sql
[pgsql@mysql01 ~]$ psql -U pgsql -d postgres
psql (14.5)
Type "help" for help.postgres=# create database test template=template0 encoding='UTF8' locale='C';CREATE DATABASE
postgres=# revoke create on schema public from public;
REVOKE
postgres=# 
postgres=# \c test pgsql
You are now connected to database "test" as user "pgsql".
test=# create table t1(id int, name varchar);
CREATE TABLE
test=# create table t2(id int, name varchar);
CREATE TABLE
test=# insert into t1 values(1,'a'),(2,'b');
[pgsql@mysql01 ~]$ psql -U pgsql -d postgres -c "drop database test;"
DROP DATABASE
[pgsql@mysql01 ~]$ psql -U pgsql -d postgres
psql (14.5)
postgres=# drop database if exists test;
DROP DATABASE
postgres=# create database test template=template0 encoding='UTF8' locale='C';
CREATE DATABASE
postgres=# revoke create on schema public from public;
REVOKE
postgres=# \c test pgsql
You are now connected to database "test" as user "pgsql".
test=# drop table if exists t1;
NOTICE:  table "t1" does not exist, skipping
DROP TABLE
test=# drop table if exists t2;
NOTICE:  table "t2" does not exist, skipping
DROP TABLE
test=# 
test=# create table t1(id int, name varchar);
CREATE TABLE
test=# create table t2(id int, name varchar);
CREATE TABLE
test=# insert into t1 values(1,'a'),(2,'b');
INSERT 0 2
test=# insert into t2 values(1,'a'),(2,'b');
INSERT 0 2
test=# 
test=# select * from t1;id | name 
----+------1 | a2 | b
(2 rows)test=# select * from t2;id | name 
----+------1 | a2 | b
(2 rows)test=# 
test=# -- 创建只读角色
test=# create role r_read;
CREATE ROLE
test=# grant select on all tables in schema public to r_read;
GRANT
test=# ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to r_read;
ALTER DEFAULT PRIVILEGES
test=# create role r_read_write;
CREATE ROLE
test=# grant select, insert,update,delete  on all tables in schema public to r_read_write;
GRANT
test=# ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select, insert, update, delete  on tables to r_read_write;
ALTER DEFAULT PRIVILEGES
test=# create user u01; 
CREATE ROLE
test=# grant r_read to u01;
GRANT ROLE
test=# 
test=# create user u02; 
CREATE ROLE
test=# grant r_read_write to u02;
GRANT ROLE
test=# \c test u01
You are now connected to database "test" as user "u01".
test=> select * from t1;id | name 
----+------1 | a2 | b
(2 rows)test=> select * from t2;id | name 
----+------1 | a2 | b
(2 rows)test=> insert into t1 values(3,'c'); -- 报错才是正常的
ERROR:  permission denied for table t1
test=> \c test u02
You are now connected to database "test" as user "u02".
test=> select * from t1;id | name 
----+------1 | a2 | b
(2 rows)test=> select * from t2;id | name 
----+------1 | a2 | b
(2 rows)test=> insert into t1 values(3,'c');
INSERT 0 1
test=> insert into t2 values(3,'c');
INSERT 0 1
test=> 
test=> \c test pgsql
You are now connected to database "test" as user "pgsql".
test=# create table t3(id int);
CREATE TABLE
test=# insert into t3 values(1);
INSERT 0 1
test=# 
test=# \c test u01
You are now connected to database "test" as user "u01".
test=> select * from t3;id 
----1
(1 row)test=> insert into t3 values(2);
ERROR:  permission denied for table t3
test=> \c test u02
You are now connected to database "test" as user "u02".
test=> select * from t3;id 
----1
(1 row)test=> insert into t3 values(2);
INSERT 0 1
test=> 

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

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

相关文章

基于Android的课程教学互动系统 微信小程序uniapp

教学互动是学校针对学生必不可少的一个部分。在学校发展的整个过程中,教学互动担负着最重要的角色。为满足如今日益复杂的管理需求,各类教学互动程序也在不断改进。本课题所设计的springboot基于Android的教学互动系统,使用SpringBoot框架&am…

接口幂等性设计的最佳实现

一、什么是幂等 二、为什么需要幂等 三、接口超时了,到底如何处理? 四、如何设计幂等 全局的唯一性ID 幂等设计的基本流程 五、实现幂等的8种方案 selectinsert主键/唯一索引冲突 直接insert 主键/唯一索引冲突 状态机幂等 抽取防重表 token令牌 悲观锁…

【Go 基础篇】Go语言结构体基本使用

在Go语言中,结构体是一种重要的数据类型,用于定义和组织一组不同类型的数据字段。结构体允许开发者创建自定义的复合数据类型,类似于其他编程语言中的类。本文将深入探讨Go语言中结构体的定义、初始化、嵌套、方法以及与其他语言的对比&#…

ASP.NET Core 的日志系统

ASP.NET Core 提供了丰富日志系统。 可以通过多种途径输出日志,以满足不同的场景,内置的几个日志系统包括: Console,输出到控制台,用于调试,在产品环境可能会影响性能。Debug,输出到 System.Di…

浅析编程中的语法糖

1、理解语法糖 1.1.什么是语法糖? 语法糖是一种编程语言的特性,它并不引入新功能,而是通过提供更简洁、易读的语法形式,使代码编写和理解变得更加轻松。它有点像是一种“甜蜜”的语法,让我们在不改变底层逻辑的情况下…

037 - 有关时间和日期的函数方法

文档:MySQL :: MySQL 5.7 Reference Manual :: 12.7 Date and Time Functions​​​​​​ 以下为案例,更多内容可查看文档 返回当前日期: CURDATE() 返回当前时间: CURTIME() 返回当前日期和时间: NOW() 返回年份&a…

系统学习Linux-ELK日志收集系统

ELK日志收集系统集群实验 实验环境 角色主机名IP接口httpd192.168.31.50ens33node1192.168.31.51ens33noed2192.168.31.53ens33 环境配置 设置各个主机的ip地址为拓扑中的静态ip,并修改主机名 #httpd [rootlocalhost ~]# hostnamectl set-hostname httpd [root…

【2023】LeetCode HOT 100——链表

目录 1. 相交链表1.1 C++实现1.2 Python实现1.3 时空分析2. 反转链表2.1 C++实现2.2 Python实现2.3 时空分析3. 回文链表3.1 C++实现3.2 Python实现3.3 时空分析4. 环形链表4.1 C++实现4.2 Python实现4.3 时空分析5. 环形链表 II5.1 C++实现5.2 Python实现

Jupyter installation Tutorial

文章目录 1. 面向的系统2. 什么是Jupyter?3. 安装Python环境4. 安装Jupyter notebook5. Jupyter的启动和配置6. Jupyter的使用技巧7. conclusion参考文献 1. 面向的系统 Windows安装 2. 什么是Jupyter? Jupyter Notebook是一个开源的Web应用程序&…

Qt6.5安装教程——国内源

为什么离线包没了? Qt6开始非商业授权下,不再提供离线安装方式的exe,但源码安装费时费力,所以推荐安装方式已经为在线组件安装方式,包括vs2022、Qt在线安装工具已经成为开发工具新的安装趋势。 Qt是不是要放弃开源&…

【LeetCode: 56. 合并区间+贪心+双指针+标识+模拟】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

C#,《小白学程序》第六课:队列(Queue)的应用,《实时叫号系统》

医院里面常见的叫号系统怎么实现的&#xff1f; 1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序》第…

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上&#xff0c;将codeigniter4文件夹移动到/var/nginx/html根目录下&#xff0c;浏览器地址栏输入IP/codeigniter/pulbic 一直提示&#xff1a; Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…

图像颜色空间转换

目录 1.图像颜色空间介绍 RGB 颜色空间 2.HSV 颜色空间 3.RGBA 颜色空间 2.图像数据类型间的互相转换convertTo() 3.不同颜色空间互相转换cvtColor() 4.Android JNI demo 1.图像颜色空间介绍 RGB 颜色空间 RGB 颜色空间是最常见的颜色表示方式之一&#xff0c;其中 R、…

SQL注入之报错注入

文章目录 报错注入是什么&#xff1f;报错注入获取cms账号密码成功登录 报错注入是什么&#xff1f; 在注入点的判断过程中&#xff0c;发现数据库中SQL 语句的报错信息&#xff0c;会显示在页面中&#xff0c;因此可以利用报错信息进行注入。 报错注入的原理&#xff0c;就是在…

jwt安全问题

文章目录 jwt安全问题jwt简介jwt组成headerpayloadsignature 潜在漏洞空加密算法web346 密钥爆破web348 敏感信息泄露web349 **修改算法RS256为HS256**web350 jwt安全问题 jwt简介 JWT的全称是Json Web Token&#xff0c;遵循JSON格式&#xff0c;跨域认证解决方案&#xff0…

Vue.js2+Cesium1.103.0 十、加载 Three.js

Vue.js2Cesium1.103.0 十、加载 Three.js Demo ThreeModel.vue <template><divid"three_container"class"three_container"/> </template><script> /* eslint-disable eqeqeq */ /* eslint-disable no-unused-vars */ /* eslint…

unity VS无法进行断点调试

有时候我们的VS无法进行断点调试&#xff0c;报错如下&#xff1a; 原因是&#xff1a;开启了多个项目&#xff0c;vs无法找到调式项目 解决&#xff1a;点击菜单栏--调试----附加unity调试程序 会弹出一个框&#xff0c;然后选择你要调试的项目 即可

【Spring Boot】Spring Boot自动加载机制:简化应用程序的启动

在微服务盛行的今天&#xff0c;快速搭建和启动应用程序变得至关重要。Spring Boot作为Java生态系统中主流的框架&#xff0c;其自动加载机制使得开发者能够快速构建和启动应用程序。本文将详细介绍Spring Boot的自动加载机制&#xff0c;并通过代码示例加以说明。 首先&#…

Uniapp笔记(六)uniapp基础

一、腾讯地图 1、uniapp地图渲染 <template><view><map class"map" :longitude"longitude" :latitude"latitude"></map></view> </template> <script>export default {data() {return {longitude:1…