PostgreSQL角色与权限体系

权限

PostgreSQL 中所有对象都有一个所有者(owner),通常为创建该对象的用户。对于大多数对象,只允许超级用户(superuser)或者所有者(owner)可以对对象执行操作,其它用户需要授予一定的权限(privileges)。

可以改变一个对象的所有者,比如:

ALTER TABLE table_name OWNER TO new_owner;

只有超级用户或者当当前用户既是对象的 owner,又拥有 SET ROLE 到 new_owner 的权限的时候,才运行进行修改 OWNER 的操作。

可用权限

可使用的权限有很多,比如:SELECTINSERTUPDATEDELETECREATEEXECUTEUSAGE 等,具体可参考 PG 官方文档

权限的授予与回收

可以通过 GRANT 进行权限的授予,比如:

-- 授予joe用户对accounts表的UPDATE权限
GRANT UPDATE ON accounts TO joe;

具体可参考 PG 官方文档

可以使用 REVOKE 进行权限的回收,比如:

-- 回收 PUBLIC 用户对 accounts 表的所有权限
REVOKE ALL ON accounts FROM PUBLIC;

具体可参考 PG 官方文档

ALL 指代一个对象的所有权限。针对不同的对象,它的具体权限内容有所不同。
PUBLIC 是一个特殊的用户,它指代系统中的所有用户,包括尚未创建的用户。
只有对象的所有者或者超级用户可以授予或者回收权限。

默认情况下,数据库的CONNECTTEMPORARY (创建临时表)权限;函数和存储过程的EXECUTE权限;语言和数据类型(包括域)的USAGE权限,被开放给 PUBLIC,其它对象,比如表、表中的某一列、序列、外部数据包装器等默认不会开放给 PUBLIC
当然,可以使用 ALTER DEFAULT PRIVILEGES 来改变默认的这种行为。

ACL(Access Control List)

ACL 即访问控制列表,用于描述一个对象的权限授予情况。每个数据库对象(如表、视图、函数等)都关联着一个ACL,该列表详细记录了哪些用户或角色有权访问该对象,以及他们被授予的具体权限。
ACL 中的每一项都有这样的格式:

grantee=privilege-abbreviation[*].../grantor

grantee 表示权限接收者,如果 grantee 为空,则表示权限接受者为 PUBLIC
privilege-abbreviation 是权限的缩写,上面提到的每一种权限类型,都对应有一个单字符的缩写:

  • SELECTr
  • INSERTa
  • UPDATEw
  • DELETEd
  • TRUNCATED
  • REFERENCESx
  • TRIGGERt
  • CREATEC
  • CONNECTc
  • TEMPORARYT
  • EXECUTEX
  • USAGEU
  • SETs
  • ALTER SYSTEMA
  • MAINTAINm
    如果 ACL 项中的 privilege-abbreviation 后跟着一个 * 号,表示这个权限在 GRANT 时使用了 WITH GRANT OPTION,也就是说权限的接收者可以继续将该权限授予其它人。
    grantor 表示权限的授予者。

可以在使用 psql 中使用 \dp 对象 查看某个对象的 ACL。

ACL 举例

比如我们创建了两个用户,并给 miriam 用户授予了对 PUBLIC 命名空间的创建和使用权限,以使 miriam 能够在 PUBLIC 命名空间下创建对象。

CREATE 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值