`

PostgreSQL的用户、角色和权限管理

阅读更多

Pg权限分为两部分,一部分是“系统权限”或者数据库用户的属性,可以授予roleuser两者区别在于login权限);一部分为数据库对象上的操作权限。对超级用户不做权限检查,其它走acl。对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走aclpg里,对acl模型做了简化,组和角色都是role,用户和角色的区别是角色没有login权限

 

可以用下面的命令创建和删除角色,

CREATE ROLE name;

DROP ROLE name;

为了方便,也可以在 shell 命令上直接调用程序 createuser dropuser,这些工具对相应命令提供了封装:

createuser name

dropuser name

 

 

数据库对象上的权限有:SELECTINSERT UPDATEDELETERULE REFERENCESTRIGGERCREATE TEMPORARYEXECUTE,和 USAGE等,具体见下面定义

 

typedefuint32AclMode;         /* a bitmask of privilege bits */

 

#define ACL_INSERT      (1<<0)  /* for relations */

#define ACL_SELECT      (1<<1)

#define ACL_UPDATE      (1<<2)

#define ACL_DELETE      (1<<3)

#define ACL_TRUNCATE    (1<<4)

#define ACL_REFERENCES  (1<<5)

#define ACL_TRIGGER     (1<<6)

#define ACL_EXECUTE     (1<<7)  /* for functions */

#define ACL_USAGE       (1<<8)  /* for languages, namespaces, FDWs, and

                                 * servers */

#define ACL_CREATE      (1<<9)  /* for namespaces and databases */

#define ACL_CREATE_TEMP (1<<10) /* for databases */

#define ACL_CONNECT     (1<<11) /* for databases */

#define N_ACL_RIGHTS    12      /* 1 plus the last 1<<x */

#define ACL_NO_RIGHTS   0

/* Currently, SELECT ... FOR UPDATE/FOR SHARE requires UPDATE privileges */

#define ACL_SELECT_FOR_UPDATE   ACL_UPDATE

 

我们可以用特殊的名字 PUBLIC 把对象的权限赋予系统中的所有角色。 在权限声明的位置上写 ALL,表示把适用于该对象的所有权限都赋予目标角色。

beigang=#  grant all on schema csm_ca to public;

GRANT

beigang=# revoke all on schema csm_ca from public;

REVOKE

beigang=#

 

每种对象的all权限定义如下:

/*

 * Bitmasks defining "all rights" for each supported object type

 */

#define ACL_ALL_RIGHTS_COLUMN       (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_REFERENCES)

#define ACL_ALL_RIGHTS_RELATION    (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER)

#define ACL_ALL_RIGHTS_SEQUENCE     (ACL_USAGE|ACL_SELECT|ACL_UPDATE)

#define ACL_ALL_RIGHTS_DATABASE     (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)

#define ACL_ALL_RIGHTS_FDW          (ACL_USAGE)

#define ACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)

#define ACL_ALL_RIGHTS_FUNCTION     (ACL_EXECUTE)

#define ACL_ALL_RIGHTS_LANGUAGE     (ACL_USAGE)

#define ACL_ALL_RIGHTS_LARGEOBJECT  (ACL_SELECT|ACL_UPDATE)

#define ACL_ALL_RIGHTS_NAMESPACE    (ACL_USAGE|ACL_CREATE)

#define ACL_ALL_RIGHTS_TABLESPACE   (ACL_CREATE)

 

 

用户的属性可参见下图:

pg_roles供访问数据库角色有关信息的接口。 它只是一个 pg_authid 表的公开可读部分的视图,把口令字段用空白填充了。

Table 42-39.pg_roles字段

名字

类型

引用

描述

rolname

name

 

角色名

rolsuper

bool

 

有超级用户权限的角色

rolcreaterole

bool

 

可以创建更多角色的角色

rolcreatedb

bool

 

可以创建数据库的角色

rolcatupdate

bool

 

可以直接更新系统表的角色。(除非这个字段为真,否则超级用户也不能干这个事情。)

rolcanlogin

bool

 

可以登录的角色,也就是说,这个角色可以给予初始化会话认证的标识符。

rolpassword

text

 

不是口令(总是 ********

rolvaliduntil

timestamptz

 

口令失效日期(只用于口令认证);如果没有失效期,为 NULL

rolconfig

text[]

 

运行时配置变量的会话缺省

 

 

 

下面实验验证

先创建一个角色xxx,再创建一个超级用户csm、普通用户csm_cacsm用户创建一个数据库testdb,在这个数据库里创建一个schemacsm_ca,然后赋予普通用户csm_ca操作数据库testdbschemacsm_ca里的表的权限。

1

Create role

 

testdb=# create role xxx with superuser;

CREATE ROLE

 

2

Create user

 

testdb=# create user csm with superuser password 'csm';

CREATE ROLE

testdb=# create user csm_ca with password 'csm_ca';

CREATE ROLE

testdb=#

 

3

验证

 

 

testdb=# \du

角色列表

-[ RECORD 1 ]--------------------------------------

角色名称 | csm

属性     | 超级用户

成员属于 | {}

-[ RECORD 2 ]--------------------------------------

角色名称 | csm_ca

属性     |

成员属于 | {}

-[ RECORD 3 ]--------------------------------------

角色名称 | postgres

属性     | 超级用户, 建立角色, 建立 DB, Replication

成员属于 | {}

-[ RECORD 4 ]--------------------------------------

角色名称 | xxx

属性     | 超级用户, 无法登录

成员属于 | {}

 

 

testdb=# SELECT * FROM pg_roles;

-[ RECORD 1 ]---------+---------

rolname               | postgres

rolsuper              | t

rolinherit            | t

rolcreaterole         | t

rolcreatedb           | t

rolcreatedblink       | t

rolcreatepublicdblink | t

roldroppublicdblink   | t

rolcatupdate          | t

rolcanlogin           | t

rolreplication        | t

rolconnlimit          | -1

rolpassword           | ********

rolvaliduntil         |

rolconfig             |

oid                   | 10

-[ RECORD 2 ]---------+---------

rolname               | csm

rolsuper              | t

rolinherit            | t

rolcreaterole         | f

rolcreatedb           | f

rolcreatedblink       | f

rolcreatepublicdblink | f

roldroppublicdblink   | f

rolcatupdate          | t

rolcanlogin           | t

rolreplication        | f

rolconnlimit          | -1

rolpassword           | ********

rolvaliduntil         |

rolconfig             |

oid                   | 24598

-[ RECORD 3 ]---------+---------

rolname               | csm_ca

rolsuper              | f

rolinherit            | t

rolcreaterole         | f

rolcreatedb           | f

rolcreatedblink       | f

rolcreatepublicdblink | f

roldroppublicdblink   | f

rolcatupdate          | f

rolcanlogin           | t

rolreplication        | f

rolconnlimit          | -1

rolpassword           | ********

rolvaliduntil         |

rolconfig             |

oid                   | 24599

-[ RECORD 4 ]---------+---------

rolname               | xxx

rolsuper              | t

rolinherit            | t

rolcreaterole         | f

rolcreatedb           | f

rolcreatedblink       | f

rolcreatepublicdblink | f

roldroppublicdblink   | f

rolcatupdate          | t

rolcanlogin           | f

rolreplication        | f

rolconnlimit          | -1

rolpassword           | ********

rolvaliduntil         |

rolconfig             |

oid                   | 24600



 


postgres=# \c beigang

You are now connected to database "beigang" as user "csm".

5

Csm用户在beigang里创建schema: csm_ca

beigang=#

beigang=#

beigang=# create schema csm_ca;

CREATE SCHEMA

beigang=#


 

6

验证模式csm_ca和用户csm_ca

beigang=# \dn

   架构模式列表

  名称  |  拥有者

--------+----------

 csm_ca | csm

 dbo    | postgres

 public | postgres

 sys    | postgres

(4 行记录)

 

 

beigang=# \du

                            角色列表

 角色名称 |                   属性                   | 成员属于

----------+------------------------------------------+----------

 csm      | 超级用户                                 | {}

 csm_ca   |                                          | {}

 postgres | 超级用户, 建立角色, 建立 DB, Replication | {}

 xxx      | 超级用户, 无法登录                       | {}

 

 

beigang=#

 

7

超级用户csm给普通用户csm_ca授予操作schema csm_ca的权限

 

beigang=#  grant all on schema csm_ca to csm_ca;

GRANT

beigang=# grant all on all tables in schema csm_ca to csm_ca;

GRANT

beigang=#

 

8

pg中组就是role,操作见以下

beigang=# grant xxx to csm_ca;

GRANT ROLE

beigang=# revoke xxx from csm_ca;

REVOKE ROLE

beigang=#

 

参考:

Pg documentation

src/include/nodes/parsenodes.h

src/include/utils/acl.h

 

 ----------------

转载请著明出处,来自以下博客或mail至beigaang@gmail.com联系:
blog.csdn.net/beiigang
beigang.iteye.com

  • 大小: 96.2 KB
  • 大小: 93.5 KB
分享到:
评论
1 楼 chenxliang 2016-11-04  
2016年10月26、27日,上海浦东,Postgres中国用户大会2016(PG大象会)已经圆满落幕了,大会现场大咖分享视频已经正式上线(含嘉宾演讲PPT),你可直接微信搜索公众号“IT大咖说”(公众号ID:itdakashuo)观看视频。
PG中国社区的发展,需要你的成长与实践,好好努力吧,也可转发朋友圈进行分享,让更多的朋友来了解和学习postgres,为postgreSQL在中国的成长贡献一份力量!谢谢!

相关推荐

    PostgreSQL教程(十二):角色和权限管理介绍

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

    postgresql中文手册

    18. 数据库角色和权限 19. 管理数据库 20. 用户认证 21. 区域 22. 日常数据库维护工作 23. 备份与恢复 24. 高可用性与负载均衡 25. 监控数据库的活动 26. 监控磁盘使用情况 27. 可靠性和预写式日志 28. ...

    PostgreSQL 8.2.3 中文文档

    数据库角色和权限 19. 管理数据库 20. 用户认证 21. 区域 22. 日常数据库维护工作 23. 备份与恢复 24. 高可用性与负载均衡 25. 监控数据库的活动 26. 监控磁盘使用情况 27. 可靠性和预写式日志 28. 回归...

    Asp.net Core 权限管理系统

    技术路线 Asp.net Core Mvc EntityFrameworkCore Bootstrap AdminLTE PostgreSQL 实现功能 组织机构管理 角色管理 用户管理 功能管理 权限管理

    Shiro 基于,用户、角色、权限,的通用权限管理系统设计思路shiro_urp.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、...

    ansible-docker-postgres:管理和运行 PostgreSQL docker 容器的 Ansible 角色

    管理和运行 PostgreSQL docker 容器的 Ansible 角色。 有关使用 docker 镜像的。 角色变量 docker_postgres__name (默认值:postgres):此名称用于主文件夹路径的名称和容器的名称。 docker_postgres__image ...

    基于SpringBoot+MyBatis+Shiro实现多数据库权限管理系统(数据结构课程设计)【100012773】

    实现功能:管理员管理、角色管理、部门管理,可操作本部门及子部门数据;菜单管理、定时任务、参数管理、字典管理、系统日志,没有数据权限;业务功能,按照用户数据权限,查询、操作数据【没有本部门数据权限,也能...

    C#课设项目-基于ASP.NET开发的EasyCms后台权限管理系统源码+项目说明+sql数据库.zip

    C#课设项目-基于ASP.NET开发的EasyCms后台权限管理系统源码+项目说明+sql数据库.zipC#课设项目-基于ASP.NET开发的EasyCms后台权限管理系统源码+项目说明+sql数据库.zipC#课设项目-基于ASP.NET开发的EasyCms后台权限...

    基于JAVA办公自动化系统(源代码+使用文档)后端代码

    用户管理:管理员工账户、角色和权限。 文档管理:存储、检索和共享办公文档。 任务管理:分配、跟踪和报告任务进度。 日程管理:安排会议、提醒和个人日程。 通讯协作:即时消息、邮件和视频会议。 技术栈 编程语言...

    基于asp.net的后台管理系统(Bootstrap)(源码+数据库).zip

    角色对应用程序授权(多个前台应用公用一个后台权限管理系统) 部门对用户授权 7. 提供字典表用于前台网站个性化配置 8. 完全响应式布局(支持电脑、平板、手机等所有主流设备) 9. 内置多数据源支持,配置简单...

    web开发课程设计案例&数据库毕设实例.docx

    任务分配: 实现将任务分配给特定用户的功能,可以通过角色进行权限管理。 状态跟踪: 任务的状态应包括待处理、进行中、已完成等,用户可以根据状态筛选任务。 报告生成: 实现生成任务完成报告的功能,报

    C#大作业-基于Asp.net Core 后台框架开发的内容管理系统源码+项目说明+sql数据库.zip

    ## 权限管理 用户管理 角色管理 菜单管理 通用字典 登录日志 异常日志 Hangfire定时任务 单位组织 职位信息 代码生成辅助 ## CMS内容管理 栏目管理 文章管理 模板管理 模板匹配 静态页面生成(可以...

    SpringBoot项目医患档案管理系统.zip

    6. 权限控制与安全:系统对不同角色的用户设置不同的访问权限,确保患者信息的隐私和安全。 7. 通知提醒系统:系统向患者发送就诊提醒、用药提醒等重要通知。 8. 移动访问支持:系统支持移动端访问,方便医护人员...

    SpringBoot项目基于springboot医疗报销系统的设计与实现.zip

    8. 权限和角色管理:确保不同角色的用户(如患者、医生、管理员)访问相应功能的权限控制。 这个医疗报销系统的设计不仅提升了患者的报销体验,同时为医疗机构提供了一种高效、透明的报销管理解决方案。此外,系统...

    SpringBoot项目数码论坛系统设计与实现.zip

    6. 用户权限管理:根据用户等级或角色,系统可以授予不同的权限,如管理版块、审核帖子等。 7. 积分与徽章:系统可能包含积分系统和徽章系统,以奖励用户的活跃参与和贡献。 8. 私信通讯:用户可以通过私信功能与...

    sqlmap 自动化的SQL注入工具

    4、支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列 5、支持自动识别密码哈希格式并通过字典破解密码哈希。 6、支持完全地下载某个数据库中的某个表、也可以只下载某个表中的某几列。 7、支持在数据库...

    基于Spring + Spring MVC + Mybatis

    通用的权限管理模块,基于Apache Shiro的 用户-角色-权限(RBAC)的细粒度权限控制 大量配置示例,根据需求,自由优化、调整,达到最佳性能 大量前端模块化开发示例,积极在探索前端最佳的架构,与后台最佳的交互,...

    SqlMap-Sql注入

    支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。 支持自动识别密码哈希格式并通过字典破解密码哈希。 支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分...

    train:react 和ant design实现的在线教育系统前端,基于restful接口

    安装插件前言这个是本系统的前端 :功能模块运营管理用户:登录各模块数据管理用户角色和权限配置课程类型配置运营界面配置普通用户:登录,密码修改和重置(注册未实现,企业按照统一分配或其它方式,所以未实现)组织...

    python项目棉花数据平台建设与可视化系统(django).zip

    7. **用户访问控制**:根据不同用户角色设置访问权限,保护敏感数据。 8. **移动设备兼容**:优化移动端访问体验,适应各种屏幕尺寸。 技术栈通常涉及: - Python编程语言:作为主要的后端逻辑和数据处理语言。 - ...

Global site tag (gtag.js) - Google Analytics