postgresql学习--权限管理

本文介绍了PostgreSQL的权限管理,重点在于角色的概念,角色包括登录权限、超级用户状态、数据库创建权限等。通过角色,可以更方便地管理权限,避免为每个用户精细分配权限。文章详细讲解了创建角色的语法,以及如何通过GRANT和REVOKE命令管理权限,包括赋予用户特殊属性的权限和数据库对象的权限。
摘要由CSDN通过智能技术生成

概述

相比mysql而言,postgresql在权限管理上最大的特点是引入了角色的概念,角色就是一系列相关权限的集合。比如mysql需要授权的话,直接给某个user在需要的对象上grant需要的权限,这样操作其实是比较繁琐的,你需要对每一个新建出来的账户都精细地分配不同的权限值,因为需要权限值可能会非常多且不同。而引入的角色的概念后,将可以将一些列相关的数据库权限赋给一个角色,然后再把角色赋给user就行。

在postgre中,一个用户也是一个角色,我们可以将一个用户的权限赋给另外一个用户,并且用户和角色在数据库实例层面是全局的。在初始化postgre时,有一个预定义的超级用户,这个用户名称就是你安装postgre时的linux系统账户。

角色的属性和创建语法

CREATE ROLE name [ [ WITH ] option [ ... ] ]
 
 这里的option可以是:
 
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

 

login privilege

只有具有LOGIN属性的角色才可以用作数据库连接的初始角色名。一个带有LOGIN属性的角色可以认为是和"数据库用户"相同的事物。要创建一个具有登录权限的角色,可以有以下两种方法

CREATE ROLE name LOGIN;

CREATE USER name;

也就是说,除了CREATEUSER默认赋予LOGIN之外,CREATEUSER 等价于CREATEROLE(默认不赋予CREATE ROLE)

superuser status

数据库超级用户超越所有权限检查。这是一个危险的权限,应该小心使用;最好使用非超级用户完成你的大多数工作。要创建数据库超级用户,CREATEROLE name SUPERUSER命令。你必须用已经是超级用户的角色执行这条命令。

database creation

角色要想创建数据库,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)要创建这样的角色,用CREATEROLE name CREATEDB命令。

role creation

角色要想创建角色,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)要创建这样的角色,用CREATEROLE name CREATEROLE 命令。一个带有CREATEROLE权限的角色也可以更改和删除其它角色,以及给其它角色赋予或者撤销成员关系。不过,要创建、更改、删除一个超级用户角色的成员关系,需要具有超级用户属性;只有CREATEROLE还不够。

initiating replication

角色要想启动流复制,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)用于流复制的角色必须总是拥有LOGIN权限。要创建这样的角色,使用CREATEROLEname REPLICATIONLOGIN命令。

Password

只有在客户认证方法要求与数据库建立连接必须使用口令的时候,口令才比较重要。 passwordmd5认证方法使用口令。数据库口令与操作系统口令是无关的。在创建角色的时候可以这样声明一个口令:CREATEROLE name PASSWORD 'string'

INHERIT

如果一个账户拥有某一个或多个角色,这时指定为INHERIT,则表示用户自动拥有相应角色的权限,否则这个账户没有该角色的权限。即决定一个角色是否"继承"它所在组的角色的权限。一个带有INHERIT属性的角色可以自动使用已经赋与它直接或间接所在组的任何权限。没有INHERIT,其它角色的成员关系只赋与该角色SET ROLE 成其它角色的能力;其它角色的权限只是在这么做了之后才能获得。如果没有声明,缺省是INHERIT

CONNECTION LIMIT connlimit

如果角色可以登录,这个参数声明该角色可以使用的并发连接数量。-1(缺省)意味着没有限制。

ENCRYPTED

这些关键字控制存储在系统表里面的口令是否加密。(如果没有指定,那么缺省的行为由配置参数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值