Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Postgresql如何授权未来会创建的表(避免反复授权)

Postgresql如何授权未来会创建的表(避免反复授权)

作者头像
mingjie
发布于 2022-05-12 01:23:31
发布于 2022-05-12 01:23:31
1.5K01
代码可运行
举报
运行总次数:1
代码可运行

1 前言

使用PG时经常有一类需求,某一个数据库的所有表都需要给某一个用户读权限,不管是已经创建的还是没有创建的。下面我们看下如何实现。

2 创建测试用户、数据库

只读用户read_user

读写用户update_user

测试库ptest

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create user update_user createdb;

create user read_user;

读写用户创建数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# \c - update_user
postgres=> create database ptest;
CREATE DATABASE

创建测试表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=> \c ptest
You are now connected to database "ptest" as user "update_user".
ptest=> create table tbl1(i int);
CREATE TABLE
ptest=> create table tbl12(i int);
CREATE TABLE

3 授权已经创建的表

3.1 只读用户查询无权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> select * from tbl1;
ERROR:  permission denied for relation tbl1
ptest=> select * from tbl12;
ERROR:  permission denied for relation tbl12

(二选一)3.2 对现存表授权(单表)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - update_user
You are now connected to database "ptest" as user "update_user".
ptest=> grant select on table tbl1 to read_user;
GRANT

(二选一)3.2 对现存表授权(批量)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - update_user
You are now connected to database "ptest" as user "update_user".
ptest=> grant select on all tables in schema public to read_user;
GRANT

3.3 只读用户查询成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - read_user
You are now connected to database "ptest" as user "read_user".
ptest=> select * from tbl1;
 i
---
(0 rows)

4 授权未来创建的表

使用默认授权

注意:一定要使用普通用户执行,也就是创建表的用户,不要用超级用户执行,否则会默认赋给用户全部读写权限,即使你只是指定了SELECT权限!!

update_user默认授权给read_user

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - update_user
You are now connected to database "ptest" as user "update_user".
ptest=> ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_user;
ALTER DEFAULT PRIVILEGES

检查权限(这里的owner不能是超级用户,否则权限会没有限制,read_user也能写)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - update_user
You are now connected to database "ptest" as user "update_user".
ptest=> \ddp
               Default access privileges
    Owner    | Schema | Type  |    Access privileges
-------------+--------+-------+-------------------------
 update_user | public | table | read_user=r/update_user
(1 row)

测试,没有显示授权,read_user也可以读表,无法写入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptest=> \c - update_user
You are now connected to database "ptest" as user "update_user".
ptest=> create table tblx(i int);
CREATE TABLE
ptest=> \c - read_user
You are now connected to database "ptest" as user "read_user".
ptest=> select * from tblx;
 i
---
(0 rows)
ptest=> insert into tblx values (1);
ERROR:  permission denied for relation tblx
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
超越 Mybatis-Plus?超强 ORM 框架横空出世!
MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
终码一生
2023/08/22
6550
超越 Mybatis-Plus?超强 ORM 框架横空出世!
SpringBoot+HikariCP+beetlsql高性能组合更优雅的实现多数据源分页更加丝滑
我们使用 https://start.spring.io/ 生成基础工程,选择必要的组件进行下载。
一个程序猿的异常
2023/07/24
5591
SpringBoot+HikariCP+beetlsql高性能组合更优雅的实现多数据源分页更加丝滑
Mybatis-Flex的魅力
Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
星空宇航员
2024/11/07
2010
Mybatis-Flex的魅力
mybatis-plus批量插入你用对了吗
记得有一次我们小组code review,组长看了下我们批量插入是使用mybatis原生的xml foreach实现的,于是二话不说,拍桌子,说这有性能问题。叫我们直接使用mybatis-plus,可是为啥呢?怎么用,需要注意哪些地方,也没给我们说个明白。好吧,我们对这一块也没具体调研过,就直接按他的想法去实现了。性能有没有提升了好几倍呢,其实也没实践过,反正review过了。直到有一天。。。
阿建dong一点
2022/11/26
4K1
03. Springboot集成Mybatis-flex(一)
现在主流的Mybatis增强框架有很多,当然项目中最经常使用的还是MybatisPlus为主。但是用过MybatisPlus的小伙伴也知道,对于单表操作,链式的编码方式以及提供的Lambda支持可以简化很多代码量,但是如果多表操作,就显得心有余而力不足了。因此大多数项目中对于多表操作,仍然选择采用XML的编写方式。那么这里介绍一款Mybatis增强框架,号称集成了MybatisPlus等多个框架的优点。那就是Mybatis-Flex。
有一只柴犬
2024/01/25
1.4K0
03. Springboot集成Mybatis-flex(一)
MyBatisPlus
官方图标是一个 魂斗罗 表示:Mybatis 和 Plus就像兄弟一样,相辅相成👍
Java_慈祥
2024/08/06
2860
MyBatisPlus
横空出世!MyBatis-Plus同款ES ORM框架,用起来够优雅!
Easy-Es(简称EE)是一款基于Elasticsearch(简称ES)官方提供的RestHighLevelClient打造的ORM开发框架,在RestHighLevelClient的基础上,只做增强不做改变,为简化开发、提高效率而生。EE和Mybatis-Plus(简称MP)的用法非常相似,如果你之前使用过MP的话,应该能很快上手EE。EE的理念是:把简单、易用、方便留给用户,把复杂留给框架。
macrozheng
2022/12/14
1.2K0
横空出世!MyBatis-Plus同款ES ORM框架,用起来够优雅!
一文通关之MybatisPlus
MyBatisPlus 1、MyBatisPlus概述 需要的基础:把我的MyBatis、Spring、SpringMVC就可以学习这个了! 为什么要学习它呢?MyBatisPlus可以节省我们大量工
yuanshuai
2022/08/22
2660
一文通关之MybatisPlus
给你的MyBatis-Plus装上批量插入的翅膀
大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
慕容千语
2020/10/10
6.3K1
给你的MyBatis-Plus装上批量插入的翅膀
太火了!MyBatis Plus 为啥这么牛?
大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,致力于MyBatis的基础上只做增强不做改变,为简化开发,提高效率而生。
程序员白楠楠
2021/01/13
7010
02-MybatisPlus批量插入性能够吗?
“不要用 mybatis-plus 的批量插入,它其实也是遍历插入,性能很差的”。真的吗?他们的立场如下:
JavaEdge
2025/06/01
860
02-MybatisPlus批量插入性能够吗?
MyBatis `saveBatch` 性能调优详解
MyBatis是一个优秀的持久层框架,提供了灵活的SQL映射和强大的数据库访问能力。在实际应用中,对于批量插入(saveBatch)这类操作,性能往往是关注的焦点。本文将深入讨论MyBatis中saveBatch操作的性能调优,通过代码示例和分析,帮助开发者在实践中优化批量插入操作的性能。
IT_陈寒
2023/12/14
1.1K0
MyBatis `saveBatch` 性能调优详解
MyBatis Plus 为啥这么牛?
大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生.
搜云库技术团队
2021/06/29
6100
太火了!MyBatis Plus 为啥这么牛?
大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,致力于MyBatis的基础上只做增强不做改变,为简化开发,提高效率而生。
程序员小猿
2021/01/20
3940
太火了!MyBatis Plus 为啥这么牛?
太火了!MyBatis Plus 为啥这么牛?
大家有用过MyBatis-Plus(简称MP)的都知道它是一个 MyBatis 的增强工具,致力于 MyBatis 的基础上只做增强不做改变,为简化开发,提高效率而生。
业余草
2020/11/24
6510
太火了!MyBatis Plus 为啥这么牛?
MyBatis-Plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
小简
2023/01/30
2.1K0
跟我学Springboot开发后端管理系统2:Mybatis-Plus实战
在Matrix-Web项目中使用Mybatis-Plus作为操作数据库的ORM框架。在市面上常用的ORM框架有hibernetes、mybatis、JPA等,那么为什么选择Mybatis-Plus呢?
方志朋
2022/01/06
9090
跟我学Springboot开发后端管理系统2:Mybatis-Plus实战
springboot实战之ORM整合(mybatis篇)
本文会介绍一下springboot与mybatis、mybatisplus如何进行整合,文章篇幅会有点长
lyb-geek
2019/09/25
1.4K0
MyBatis 批量插入数据的 3 种方法!
批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于《MyBatis Plus 批量数据插入功能,yyds!》的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 MyBatis Plus(下文简称 MP)的批量插入功能很多人都有误解,认为 MP 也是使用循环单次插入数据的,所以性能并没有提升;第二,对于原生批量插入的方法其实也是有坑的,但鲜有人知。 ​
磊哥
2021/10/13
4.4K1
浅谈MyBatis批量插入方法,10w条数据处理仅需2秒
接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。
用户10216580
2022/12/06
8.2K1
浅谈MyBatis批量插入方法,10w条数据处理仅需2秒
推荐阅读
相关推荐
超越 Mybatis-Plus?超强 ORM 框架横空出世!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验