postgresql影子用户实践
作者:瀚高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影子用户实践相关推荐
- 前沿分享|数澜科技联合创始人副总裁 江敏:基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践
简介:本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,数澜科技联合创始人&副总裁江敏关于"基于云原生数据仓库AnalyticDB Postgre ...
- Windows影子用户及其相应的漏洞后渗透
#当获得一条shell后,可以创建一个影子用户,通过影子用户可以行驶正常用户的所有权限与功能, 并且只可在注册表中被检测出来---(应急响应注册表很重要) 1.首先需要拥有权限创建一个Administ ...
- 在windows中创建一个影子用户
在windows中创建一个影子用户(看不到图请下载附件) 我们可以在windows操作系统中建立一个影子用户,也就是它是实际存在的,但是不会在登录时或者用户组中显示,我们可以赋予影子用户管理员权限,可 ...
- PostgreSQL切换用户,提示对等认证失败的解决方案
PostgreSQL切换用户,提示对等认证失败的解决方案 参考文章: (1)PostgreSQL切换用户,提示对等认证失败的解决方案 (2)https://www.cnblogs.com/zonglr ...
- 内存泄露从入门到精通三部曲之常见原因与用户实践
2019独角兽企业重金招聘Python工程师标准>>> 内存泄露从入门到精通三部曲之常见原因与用户实践 腾讯Bugly特约作者: 姚潮生 常见原因 1.集合类 集合类如果仅仅有添加元 ...
- PostgreSQL 创建用户并赋予权限
PostgreSQL 创建用户并赋予权限 1.创建一个test用户 2.创建COMPANY表 3.设置权限 3.1.postgresql权限说明 3.2.设置权限语法 3.3.设置用户scheam的使 ...
- 【COS 加码福利】COS 用户实践有奖征文,等你来投稿!
COS用户实践征文活动火热进行中,本次征集主题为:如何在生态场景下使用 COS? 优质文章将有机会被编入腾讯云官方文档库,供广大用户学习参考.更有多重好礼等你来拿,速来围观投稿吧! 投稿说明: 1.投 ...
- 权限维持-Windows影子用户
前言 该文章只进行技术分享与探讨,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关. 在windows中创建一个影子用户,影子用户拥有和正常用户一样的权限和功能 影子用户只 ...
- PostgreSQL 消息平台实践
标签 PostgreSQL , 消息平台 , 数组 , in any array 背景 一个多渠道消息平台的数据库设计. 业务规则 1.消息发送给最终用户,一则消息可以发送给多个社交软件平台(因为一个 ...
最新文章
- SpringBoot + Redis 分布式锁:模拟抢单
- cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
- Android Camera架构分析
- 第五天学习Java的笔记(if,switch顺序结构)
- 【DONE】dbeaver不会用,请教!!!
- SAP ABAP实用技巧介绍系列之如何创建Maintenance view
- win7 建立无线wifi执点全过程
- 电脑中毒了怎么办 电脑中病毒的解决方法
- java 改变窗口颜色_java窗口背景颜色设置
- 传染病模型系统动力学VENSIM模拟
- 计算机word怎么设置页眉,Word怎么设置长文档的页眉页脚?_计算机办公软件知识...
- mysql数据库木马查杀_服务器木马后门怎么查杀
- 怎样查自己电脑系统的版本
- 用户行为分析(Python)
- 【融职培训】Web前端学习 第7章 Vue基础教程4 组件传值
- Jetpack学习-5-Navigation简单使用
- u8 u16 u32 u64 c++
- js读取excel导出json文件
- python中用plt画图
- 6月程序员平均工资出炉,这个水平我慕了!