作者:瀚高PG实验室 (Highgo PG Lab)- 禹晓

在实际的生产环境 ,我们经常会碰到这样的情况:因为业务场景需要,本部门某些重要的业务数据表需要给予其他部门查看权限,因业务的扩展及调整,后期可能需要放开更多的表查询权限。为解决此种业务需求,我们可以采用创建视图的方式来解决,已可以通过创建影子用户的方式来满足需求,本文主要介绍影子用户的创建及授权方法。

场景1:只授予usage on schema 权限

session 1:
--创建readonly用户,并将test模式赋予readonly用户。

postgres=# create user readonly with password 'postgres';
CREATE ROLE
postgres=# grant usage on schema test to readonly;
​GRANT
postgres=# \dn
List of schemasName  | Owner
-------+-------test | postgres

session 2:

--登陆readonly用户可以查询test模式下现存的所有表。

postgres=# \c postgres readonly
You are now connected to database "postgres" as user "readonly".
postgres=> select * from test.emp ;empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno
-------+--------+-----------+------+------------+---------+---------+--------7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     307521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     307566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     207654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     307698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     307782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     107839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     107844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     307900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     307902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     207934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     107788 | test   | ANALYST   | 7566 | 1982-12-09 | 3000.00 |         |     207876 | ADAMS  | CLERK     | 7788 | 1983-01-12 | 1100.00 |         |     201111 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
(14 rows)

换到session 1创建新表t1

postgres=# create table test.t1 as select * from test.emp;
​CREATE TABLE

切换到session 2 readonly用户下,t1表无法查询

postgres=> select * from test.t1 ;
2021-03-02 15:25:33.290 CST [21059] ERROR:  permission denied for table t1
2021-03-02 15:25:33.290 CST [21059] STATEMENT:  select * from test.t1 ;
**ERROR:  permission denied for table t1

结论:如果只授予 usage on schema 权限,readonly 只能查看 test 模式下已经存在的表和对象。在授予 usage on schema 权限之后创建的新表无法查看。

场景2:授予usage on schema 权限之后,再赋予 select on all tables in schema 权限

针对上个场景session 2 **ERROR: permission denied for table t1 错误的处理

postgres=> select * from test.t1 ;
**ERROR:  permission denied for table t1

session 1: 使用postgres用户授予readonly用户 select on all tables 权限

postgres=# grant select on all tables in schema test TO readonly ;

session 2: readonly用户查询 t1 表

postgres=> select * from test.t1;empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno
-------+--------+-----------+------+------------+---------+---------+--------7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     307521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     307566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     207654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     307698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     307782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     107839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     107844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     307900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     307902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     207934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     107788 | test   | ANALYST   | 7566 | 1982-12-09 | 3000.00 |         |     207876 | ADAMS  | CLERK     | 7788 | 1983-01-12 | 1100.00 |         |     201111 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
(14 rows)

session1 :postgres用户的test模式下创建新表 t2

postgres=# create table test.t2 as select * from test.emp;
SELECT 14

session 2:readonly用户查询 t2 表权限不足

postgres=>  select * from test.t2 ;
ERROR:  permission denied for table t2

session 1:再次赋予 grant select on all tables

postgres=# grant select on all tables in schema test TO readonly ;

session 2:readonly用户又可以查看 T2 表

postgres=>  select * from test.t2 ;empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno
-------+--------+-----------+------+------------+---------+---------+--------7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     307521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     307566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     207654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     307698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     307782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     107839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     107844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     307900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     307902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     207934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     107788 | test   | ANALYST   | 7566 | 1982-12-09 | 3000.00 |         |     207876 | ADAMS  | CLERK     | 7788 | 1983-01-12 | 1100.00 |         |     201111 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
(14 rows)

影子用户创建

如果想让readonly只读用户不在每次  postgres用户在test模式中创建新表后都要手工赋予 grant select on all tables in schema test TO readonly  权限。则需要授予对test默认的访问权限,对于test模式新创建的也生效。

session 1:未来访问test模式下所有新建的表赋权,创建 t5 表。

postgres=# alter default privileges in schema test grant select on tables to readonly ;
ALTER DEFAULT PRIVILEGES
postgres=# create table test.t5 as select * from test.emp;
CREATE TABLE

session 2:查询readonly用户

postgres=> select * from test.t5;empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno
-------+--------+-----------+------+------------+---------+---------+--------7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     307521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     307566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     207654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     307698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     307782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     107839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     107844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     307900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     307902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     207934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     107788 | test   | ANALYST   | 7566 | 1982-12-09 | 3000.00 |         |     207876 | ADAMS  | CLERK     | 7788 | 1983-01-12 | 1100.00 |         |     201111 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
(14 rows)

总结:影子用户创建的步骤

--创建影子用户
create user readonly with password 'postgres';
--将schema中usage权限赋予给readonly用户,访问所有已存在的表
grant usage on schema test to readonly;
grant select on all tables in schema test to readonly;
--未来访问test模式下所有新建的表
alter default privileges in schema test grant select on tables to readonly ;

postgresql影子用户实践相关推荐

  1. 前沿分享|数澜科技联合创始人副总裁 江敏:基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践

    简介:本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,数澜科技联合创始人&副总裁江敏关于"基于云原生数据仓库AnalyticDB Postgre ...

  2. Windows影子用户及其相应的漏洞后渗透

    #当获得一条shell后,可以创建一个影子用户,通过影子用户可以行驶正常用户的所有权限与功能, 并且只可在注册表中被检测出来---(应急响应注册表很重要) 1.首先需要拥有权限创建一个Administ ...

  3. 在windows中创建一个影子用户

    在windows中创建一个影子用户(看不到图请下载附件) 我们可以在windows操作系统中建立一个影子用户,也就是它是实际存在的,但是不会在登录时或者用户组中显示,我们可以赋予影子用户管理员权限,可 ...

  4. PostgreSQL切换用户,提示对等认证失败的解决方案

    PostgreSQL切换用户,提示对等认证失败的解决方案 参考文章: (1)PostgreSQL切换用户,提示对等认证失败的解决方案 (2)https://www.cnblogs.com/zonglr ...

  5. 内存泄露从入门到精通三部曲之常见原因与用户实践

    2019独角兽企业重金招聘Python工程师标准>>> 内存泄露从入门到精通三部曲之常见原因与用户实践 腾讯Bugly特约作者: 姚潮生 常见原因 1.集合类 集合类如果仅仅有添加元 ...

  6. PostgreSQL 创建用户并赋予权限

    PostgreSQL 创建用户并赋予权限 1.创建一个test用户 2.创建COMPANY表 3.设置权限 3.1.postgresql权限说明 3.2.设置权限语法 3.3.设置用户scheam的使 ...

  7. 【COS 加码福利】COS 用户实践有奖征文,等你来投稿!

    COS用户实践征文活动火热进行中,本次征集主题为:如何在生态场景下使用 COS? 优质文章将有机会被编入腾讯云官方文档库,供广大用户学习参考.更有多重好礼等你来拿,速来围观投稿吧! 投稿说明: 1.投 ...

  8. 权限维持-Windows影子用户

    前言 该文章只进行技术分享与探讨,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关. 在windows中创建一个影子用户,影子用户拥有和正常用户一样的权限和功能 影子用户只 ...

  9. PostgreSQL 消息平台实践

    标签 PostgreSQL , 消息平台 , 数组 , in any array 背景 一个多渠道消息平台的数据库设计. 业务规则 1.消息发送给最终用户,一则消息可以发送给多个社交软件平台(因为一个 ...

最新文章

  1. SpringBoot + Redis 分布式锁:模拟抢单
  2. cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
  3. Android Camera架构分析
  4. 第五天学习Java的笔记(if,switch顺序结构)
  5. 【DONE】dbeaver不会用,请教!!!
  6. SAP ABAP实用技巧介绍系列之如何创建Maintenance view
  7. win7 建立无线wifi执点全过程
  8. 电脑中毒了怎么办 电脑中病毒的解决方法
  9. java 改变窗口颜色_java窗口背景颜色设置
  10. 传染病模型系统动力学VENSIM模拟
  11. 计算机word怎么设置页眉,Word怎么设置长文档的页眉页脚?_计算机办公软件知识...
  12. mysql数据库木马查杀_服务器木马后门怎么查杀
  13. 怎样查自己电脑系统的版本
  14. 用户行为分析(Python)
  15. 【融职培训】Web前端学习 第7章 Vue基础教程4 组件传值
  16. Jetpack学习-5-Navigation简单使用
  17. u8 u16 u32 u64 c++
  18. js读取excel导出json文件
  19. python中用plt画图
  20. 6月程序员平均工资出炉,这个水平我慕了!

热门文章

  1. 在VUE中使用QRCode.js
  2. 1-hadoop概述与hdfs介绍
  3. 每天5个Python小技巧(day1)
  4. 2018 OPPO开发者大会:打通技术各个脉络,全方位构建智能化服务生态
  5. 前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题
  6. [附源码]Python计算机毕业设计Django室内设计类网站
  7. 编译原理课程设计-C语言子集编译器(Java实现)
  8. ctfshow--除夕
  9. 001---病狗问题
  10. 电力电子转战数字IC20220819day64——uvm实战1A