一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。

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权限管理的更多相关文章

  1. PostgreSQL 用户和权限管理

    PostgreSQL 用户和权限管理 创建 CREATE ROLE rolename;CREATE USER username;CREATE USER和CREATE ROLE的区别在于,CREATE ...

  2. PostgreSQL学习之【用户权限管理】说明

    背景 最近在学习PostgreSQL,看了用户权限管理文档,涉及到的知识点比较多,顺便写篇文章进行整理并不定时更新,也方便自己后续进行查阅. 说明 注意:创建好用户(角色)之后需要连接的话,还需要修改 ...

  3. [转帖]PostgreSQL的用户、角色和权限管理

    PostgreSQL的用户.角色和权限管理 2018年05月18日 14:02:29 jerry-89 阅读数 6143 https://blog.csdn.net/eagle89/article/d ...

  4. POSTGRESQL 批量权限 管理方法

    原博地址 https://yq.aliyun.com/articles/41512?spm=a2c4e.11153940.0.0.20b7640fcDiFQA 关于PostgreSQL的逻辑架构和权限 ...

  5. postgresql逻辑结构--用户及权限管理(七)

    一.用户和角色 二.创建用户和角色 三.权限管理 四.

  6. Greeplum 系列(七) 权限管理

    Greeplum 系列(七) 权限管理 一.角色管理 Role 分为用户(User)和组(Group),用户有 login 权限,组用来管理用户,一般不会有 login 权限.初始化 gp 时创建了一 ...

  7. Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理

    一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...

  8. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  9. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  10. Android权限管理之Permission权限机制及使用

    前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...

随机推荐

  1. MySQL 合并查询join 查询出的不同列合并到一个表中

    为了求解问题时思路清晰,建议先分列查询,再将列合并到一个表中,这样相当于将复杂问题拆解为简单问题,一一解决.优点是避免所有问题混在一起,代码逻辑清晰,可迁移性强,下次遇到类似的查询问题能快速求解,缺点 ...

  2. django框架之drf:04、序列化器常用字段及参数,序列化器高级用法之source、定制字段数据的两种方法、多表关联反序列化的保存、ModelSerializer的使用

    Django框架之drf 目录 Django框架之drf 一.序列化器常用字段及参数 1.常用字段 2.常用字段参数 3.字段参数针对性分类 二.序列化器高级用法之source 1.定制字段名 三.定 ...

  3. UEFI引导安装UBUNUT

    1.引导方式一定要选UEFI,否则一些显卡驱动将不能安装 2.安装的时候,要在第四个界面,也就是选择覆盖安装还是保留双系统的那个界面,选择其他,一定要自己分区 3.分区: 4.一共5个重要分区: 1. ...

  4. Vim-Adventures 有趣的Vim小游戏

    入门介绍 Vim-Adventures是一个让初学者练习如何使用 Vim 的小游戏.它一共有 TODO 个 关卡,每个关卡都对应不同的 Vim 练习.一进网页我们可以看到这个画面: 点进去后就自动来到 ...

  5. 什么是Http? http和https的区别

    一.HTTP HTTP (HyperText Transfer Protocol),即超文本运输协议,是实现网络通信的一种规范 在计算机和网络世界有,存在不同的协议,如广播协议.寻址协议.路由协议等等 ...

  6. Vue学习:实现用户没有登陆时,访问后自动跳转登录页面

    设计思路 定义路由的时候配置属性,这里使用needLogin标记访问页面是否需要登录 设置路由守卫,每个页面在跳转之前都要经过验证,校验用户信息是否存在,不存在跳转到登录页 用户登录后将用户信息存储在 ...

  7. 功放世界web新手区

    第一题:view_source: 顾名思义就是查看网页源代码,按一下f12就ok 第二题:robots协议 换言之就是,robots协议告诉了我们,什么可以爬,什么不可以爬,要是觉得坐牢没什么,那就可 ...

  8. [NOI Online 提高组]冒泡排序

    题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) ...

  9. 内网安全之:黄金&白银票据传递域控制器权限维持

    内网安全之:黄金&白银票据传递域控制器权限维持 目录 内网安全之:黄金&白银票据传递域控制器权限维持 1 Golden Ticket 1.1 导出 krbtgt 的 NTLM Hash ...

  10. JMeter BeanShell 学习

    JMeter BeanShell 学习 Beanshell分为: JMeter有如下BeanShell组件: 定时器: BeanShell Timer 前置处理器:BeanShell PreProce ...