原文 PostgreSQL学习手册(角色和权限)

  PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限。
    
一、数据库角色:

1. 创建角色:
    CREATE ROLE role_name;
    
    2. 删除角色:
    DROP ROLE role_name;
    
    3. 查询角色:
    检查系统表pg_role,如:
    SELECT usename FROM pg_role;
    也可以在psql中执行\du命令列出所有角色。
    
二、角色属性:

一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。
    1. 登录权限:
    只有具有LOGIN属性的角色才可以用于数据库连接,因此我们可以将具有该属性的角色视为登录用户,创建方法有如下两种:
    CREATE ROLE name LOGIN PASSWORD '123456‘;
    CREATE USER name PASSWORD '123456';
    
    2. 超级用户:
    数据库的超级用户拥有该数据库的所有权限,为了安全起见,我们最好使用非超级用户完成我们的正常工作。和创建普通用户不同,创建超级用户必须是以超级用户的身份执行以下命令:
    CREATE ROLE name SUPERUSER;
    
    3. 创建数据库:
    角色要想创建数据库,必须明确赋予创建数据库的属性,见如下命令:
    CREATE ROLE name CREATEDB;
    
    4. 创建角色:
    一个角色要想创建更多角色,必须明确给予创建角色的属性,见如下命令:
    CREATE ROLE name CREATEROLE;
    
三、权限:

数据库对象在被创建时都会被赋予一个所有者,通常而言,所有者就是执行对象创建语句的角色。对于大多数类型的对象,其初始状态是只有所有者(或超级用户)可以对该对象做任何事情。如果要允许其它用户可以使用该对象,必须赋予适当的权限。PostgreSQL中预定义了许多不同类型的内置权限,如:SELECT、INSERT、UPDATE、DELETE、RULE、REFERENCES、TRIGGER、CREATE、TEMPORARY、EXECUTE和USAGE
    我们可以使用GRANT命令来赋予权限,如:
    GRANT UPDATE ON accounts TO joe;
    对于上面的命令,其含义为将accounts表的update权限赋予joe角色。此外,我们也可以用特殊的名字PUBLIC把对象的权限赋予系统中的所有角色。在权限声明的位置上写ALL,表示把适用于该对象的所有权限都赋予目标角色。
    要撤销权限,使用合适的REVOKE命令:
    REVOKE ALL ON accounts FROM PUBLIC;
    其含义为:对所有角色(PUBLIC)撤销在accounts对象上的所有权限(ALL)。

四、角色成员:

在系统的用户管理中,通常会把多个用户赋予一个组,这样在设置权限时只需给该组设置即可,撤销权限时也是从该组撤消。在PostgreSQL中,首先需要创建一个代表组的角色,之后再将该角色的membership权限赋给独立的用户角色即可。
    1. 创建一个组角色,通常而言,该角色不应该具有LOGIN属性,如:
    CREATE ROLE name;    
    2. 使用GRANT和REVOKE命令添加和撤消权限:
    GRANT group_role TO role1, ... ;
    REVOKE group_role FROM role1, ... ;
  一个角色成员可以通过两种方法使用组角色的权限,如:
    1. 每个组成员都可以用SET ROLE命令将自己临时"变成"该组成员,此后再创建的任何对象的所有者将属于该组,而不是原有的登录用户。
    2. 拥有INHERIT属性的角色成员自动继承它们所属角色的权限。
    见如下示例:
    CREATE ROLE joe LOGIN INHERIT;  --INHERIT是缺省属性。
    CREATE ROLE admin NOINHERIT;
    CREATE ROLE wheel NOINHERIT;
    GRANT admin TO joe;
    GRANT wheel TO admin;
    现在我们以角色joe的身份与数据库建立连接,那么该数据库会话将同时拥有角色joe和角色admin的权限,这是因为joe"继承(INHERIT)"了admin的权限。然而与此不同的是,赋予wheel角色的权限在该会话中将不可用,因为joe角色只是wheel角色的一个间接成员,它是通过admin角色间接传递过来的,而admin角色却含有NOINHERIT属性,这样wheel角色的权限将无法被joe继承。
  这样wheel角色的权限将无法被joe继承。此时,我们可以在该会话中执行下面的命令:
    SET ROLE admin;
    在执行之后,该会话将只拥有admin角色的权限,而不再包括赋予joe角色的权限。同样,在执行下面的命令之后,该会话只能使用赋予wheel的权限。
    SET ROLE wheel;
    在执行一段时间之后,如果仍然希望将该会话恢复为原有权限,可以使用下列恢复方式之一:
    SET ROLE joe;
    SET ROLE NONE;
    RESET ROLE;
    注意: SET ROLE命令总是允许选取当前登录角色的直接或间接组角色。因此,在变为wheel之前没必要先变成admin。 
    角色属性LOGIN、SUPERUSERCREATEROLE被视为特殊权限,它们不会像其它数据库对象的普通权限那样被继承。如果需要,必须在调用SET ROLE时显示指定拥有该属性的角色。比如,我们也可以给admin角色赋予CREATEDB和CREATEROLE权限,然后再以joe的角色连接数据库,此时该会话不会立即拥有这些特殊权限,只有当执行SET ROLE admin命令之后当前会话才具有这些权限。

要删除一个组角色,执行DROP ROLE group_role命令即可。然而在删除该组角色之后,它与其成员角色之间的关系将被立即撤销(成员角色本身不会受影响)。不过需要注意的是,在删除之前,任何属于该组角色的对象都必须先被删除或者将对象的所有者赋予其它角色,与此同时,任何赋予该组角色的权限也都必须被撤消。

转载于:https://www.cnblogs.com/kevinge/archive/2012/05/23/2514444.html

PostgreSQL学习手册(角色和权限) 转相关推荐

  1. PostgreSQL学习手册

    PostgreSQL学习手册(数据表) http://www.cnblogs.com/stephen-liu74/archive/2011/12/16/2290803.html 一.表的定义 二.系统 ...

  2. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:     常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:     下面是Po ...

  3. PostgreSQL学习手册(数据库维护) 转

    原文: PostgreSQL学习手册(数据库维护) 一.恢复磁盘空间: 在PostgreSQL中,使用delete和update语句删除或更新的数据行并没有被实际删除,而只是在旧版本数据行的物理地址上 ...

  4. PostgreSQL学习手册(系统表)

    一.pg_class: 该系统表记录了数据表.索引(仍然需要参阅pg_index).序列.视图.复合类型和一些特殊关系类型的元数据.注意:不是所有字段对所有对象类型都有意义. 名字 类型 引用 描述 ...

  5. PostgreSQL学习手册(十一) 数据库管理

    一.概述:     数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每个数据库对象(表.函数等)只属于一个数据库.不过对于部分系统表而言,如 pg_database,是属于整个集群的. ...

  6. PostgreSQL学习手册(客户端命令Ⅱ)

    为什么80%的码农都做不了架构师?>>>    七.pg_dump: pg_dump是一个用于备份PostgreSQL数据库的工具.它甚至可以在数据库正在并发使用时进行完整一致的备份 ...

  7. PostgreSQL学习手册(二) 模式(Schema)

    2019独角兽企业重金招聘Python工程师标准>>> 一个数据库包含一个或多个命名的模式,模式又包含表.模式还包含其它命名的对象,包括数据类型.函数,以及操作符.同一个对象名可以在 ...

  8. PostgreSQL学习手册(常用数据类型)

    2019独角兽企业重金招聘Python工程师标准>>> 一.数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 ...

  9. PostgreSQL学习手册(四) 常用数据类型

    一.数值类型:     下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer ...

最新文章

  1. Java程序员修炼之路(一)我们为什么选择Java
  2. 深入浅出CMake(一):基础篇
  3. NFS 网络挂载问题 解决
  4. mysql DDL语句
  5. “约见”面试官系列之常见面试题之第五十八篇之join和split(建议收藏)
  6. 明尼苏达推荐系统导论(第一课 欢迎来到RS)
  7. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...
  8. HALCON 21.11:深度学习笔记---术语表(7)
  9. pycharm python3.7环境_Python3+Pycharm+PyQt5环境搭建步骤图文详解
  10. python和c++哪个好-Scratch和Python与C++选哪个合适
  11. \x3c\x73\x63\x72\x69\x70\x74\x3ealert('xss');\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e
  12. IO流的知识点总结归纳
  13. 尚硅谷-个人-数据库记录基础5
  14. 如何把PDF中的英文翻译成中文
  15. html逐字显示并停止,Pr字幕如何让他逐字出现逐字消失?
  16. 项目经理如何做好授权管理?
  17. Shell按关键字删除重复行
  18. react图片剪裁react-cropper
  19. Vue.js 组件 - 组件间的循环引用
  20. 一加 Ace Pro怎么样?颜值性能它都有

热门文章

  1. 单位阶跃信号是周期信号吗_集成墙板会影响手机信号吗?
  2. Python进阶 -- 3.处理CSV格式
  3. 《剑指offer》连续子数组的最大和
  4. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符
  5. python大杀器之requests安装
  6. 深度学习常见概念解析
  7. 中关村-DIY操作系统之不分区安装Ubuntu系统
  8. 导出EXCEL中的文件到资源管理器
  9. 在MFC框架下使用osg报内存泄露的解决办法
  10. PHP 脚本文件使用 “#!/usr/bin/env php” 并执行时提示 No such file or directory