PostgreSQL权限管理
一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
1 权限的类型
PostgreSQL中支持的对象级权限包括SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、EXECUTE以及USAGE等以及一个附带WITH GRANT修饰符。除了GRANT外,前几类权限都可以顾名思义的猜到其含义,GRANT的在后面介绍。请注意,每种权限都有其适用的数据库资产类型,比如对于函数来说TRUNCATE权限毫无意义,对表来说EXECUTE权限也无意义。
2 入门介绍
创建数据库之前先使用管理员postgres用户创建一个角色,作为此数据库的所有者。一个特殊的名为PUBLIC的“角色”可以用来向系统中的每一个角色授予一个权限。同时,在数据库中有很多用户时可以设置“组”角色来帮助管理权限。
创建角色
create role mydb_admin login password 'postgres@123';
创建数据库并设定其所有者
create database mydb with owner = mydb_admin;
然后使用mydb_admin身份登录并创建schema和表。
3 GRANT
grant命令可以将权限授予他人。基本用法如下:
grant some_privilege to some_role;
牢记以下几条关于GRANT的使用原则。
只有权限的拥有者才能将权限授予别人,并且拥有者自身还得有GRANT操作的权限。这一点是不言而喻的,因为自己没有的东西当然给不了别人。
对象的所有者天然拥有此对象的所有权限,不需要再次授予。
有些权限只有对象的所有者才能拥有,任何情况下都不能授予别人。这类权限包括DROP、ALTER和REVOKE,但是对象拥有者可以选择撤销他们自己的普通权限,例如把一个表变得对他们自己和其他人只读。
授予时可以加上WITH GRANT OPTION子句,这意味着被授权者可以将得到的权限再次授予别人。示例如下:
#如果后来授予选项被撤销,则所有从接收人那里获得的权限(直接或者通过授权链获得)都将被撤销。
grant all on all tables in schema public to mydb_admin with grant option;
如果希望一次性将某个对象的所有权限都授予某人,可以使用ALL关键字,而不需要一个个权限都写下来。
grant all on mydb_admin.my_table to mydb_admin;
ALL 关键字还可以用于指代某个database或者schema中的所有对象。
grant select, update on all sequences on schema my_schema to public;
如果希望将权限授予所有人,可以使用PUBLIC关键字来指代所有角色。
grant usage on scheam my_schema to public;
官方手册的”GRANT“(https://www.postgresql.org/docs/current/sql-grant.html )章节中对GRANT命令的所有细节都有及其详尽的说明,建议阅读,防止设错权限导致系统安全隐患。
4 REVOKE
默认情况下,所有用户都有一组权限(SELECT, INSERT, UPDATE, DELETE, TRUNCATE,REFERENCES和TRIGGER)通过特殊角色PUBLIC连接到所有新创建的表。为了确保某个用户不再能够访问某个表,对该表的权限必须从PUBLIC和该特定用户撤销。
从用户user1撤销表table1的所有权限,运行以下SQL命令:
REVOKE ALL ON table1 FROM user1;
不过,因为所有用户通常都可以通过 PUBLIC 角色访问该表,所以还必须执行以下操作。
REVOKE ALL ON table1 FROM PUBLIC;
5 默认权限
从pg9.0开始引入了默认权限,使用默认权限,用户可以一次性针对某个特定schema或database中的所有数据库资产进行权限设置操作,哪怕这些资产还没有创建。如果你的默认全新啊更新及时,那么这样可以大大简化权限管理的工作。
假设我们希望对所有数据库用户都授予某schema中所有函数和表的EXECUTE和SELECT权限,那么我们可以按下面示例来定义权限。
定义schema的默认权限
grant usage on schema my_schema to public;
alter default privileges in schema my_schema grant select, references on tables to public;
alter default privileges in schema my_schema grant all on tables to mydb_admin with grant option;
alter default privileges in schema my_schema grant select, update on sequences to public;
alter default privileges in schema my_schema grant all on functions to mydb_admin with grant option;
alter default privileges in schema my_schema grant usage on type to public;
新增或修改默认权限并不会影响已有的权限设置,即只有当某个对象的某项权限未专门设定的情况下,默认权限设定才会生效。
了解更多默认权限的信息,参考官方手册”修改默认权限“这一节(https://www.postgresql.org/docs/current/sql-alterdefaultprivileges.html )的内容。
PostgreSQL权限管理的更多相关文章
- PostgreSQL 用户和权限管理
PostgreSQL 用户和权限管理 创建 CREATE ROLE rolename;CREATE USER username;CREATE USER和CREATE ROLE的区别在于,CREATE ...
- PostgreSQL学习之【用户权限管理】说明
背景 最近在学习PostgreSQL,看了用户权限管理文档,涉及到的知识点比较多,顺便写篇文章进行整理并不定时更新,也方便自己后续进行查阅. 说明 注意:创建好用户(角色)之后需要连接的话,还需要修改 ...
- [转帖]PostgreSQL的用户、角色和权限管理
PostgreSQL的用户.角色和权限管理 2018年05月18日 14:02:29 jerry-89 阅读数 6143 https://blog.csdn.net/eagle89/article/d ...
- POSTGRESQL 批量权限 管理方法
原博地址 https://yq.aliyun.com/articles/41512?spm=a2c4e.11153940.0.0.20b7640fcDiFQA 关于PostgreSQL的逻辑架构和权限 ...
- postgresql逻辑结构--用户及权限管理(七)
一.用户和角色 二.创建用户和角色 三.权限管理 四.
- Greeplum 系列(七) 权限管理
Greeplum 系列(七) 权限管理 一.角色管理 Role 分为用户(User)和组(Group),用户有 login 权限,组用来管理用户,一般不会有 login 权限.初始化 gp 时创建了一 ...
- Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理
一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
随机推荐
- 容器镜像仓库-Harbor的安装及踩坑
之前实验室的师兄让我帮忙给服务器上装一个Harbor,花了不少时间,遂记录之,以避坑. 在学习使用Harbor之前,需要了解Docker的使用,可以看看我之前的博客:应用容器引擎-Docker.Doc ...
- 论文翻译:2022_Time-Shift Modeling-Based Hear-Through System for In-Ear Headphones
论文地址:基于时移建模的入耳式耳机透听系统 引用格式: 摘要 透传(hear-through,HT)技术是通过增强耳机佩戴者对环境声音的感知来主动补偿被动隔离的.耳机中的材料会减少声音 500Hz以上 ...
- 3分钟教你安装 Compressor视频转码编辑工具 V4.6.3中文破解版 小白一看就会
Comperssor 下载 下载直通车 立即下载 Mac App Store: https://apps.apple.com/cn/app/compressor/id424390742?ign-mpt ...
- easyUI实现查询条件传递给后端并自动刷新表格的两种方法
easyUI实现查询条件传递给后端并自动刷新表格的两种方法 用ajax的post函数传递参数,再通过loadData方法将数据初始化到表格中 js代码: //根据id搜索 $("#stand ...
- P14_协同工作-开发者的权限说明以及如何维护项目成员
不同项目成员对应的权限 开发者的权限说明 开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发 体验者权限:可使用体验版小程序 登录权限:可登录小程序管理后台,无需管理员确认 开发设置:设置 ...
- Requset02
其他功能: 1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数 1. String getParameter(String name):根据参数名称获取参数值 ...
- ctfshow-web入门-SSTI学习
千万要仔细,不要拼错单词 千万要仔细,不要拼错单词 千万要仔细,不要拼错单词 web 361 payload name={{[].__class__.__base__.__subclasses__() ...
- cpu功耗排行_常见NAS CPU处理器性能排行榜(简单天梯图)
转载csdn: (35条消息) cpu功耗排行_常见NAS CPU处理器性能排行榜(简单天梯图)_weixin_39618173的博客-CSDN博客
- Golang如何快速构建一个CLI小工示例
这篇文章主要为大家介绍了Golang如何快速构建一个CLI小工具详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 如何Golang快速构建一个CLI小工具 在现实开发的 ...
- 手机在线编程软件Anycodes
下载地址:http://ys-f.ys168.com/608949803/V6gUhjk3V382275HM63/%E6%89%8B%E6%9C%BA%E7%BC%96%E7%A8%8B%E8%BD% ...