PostgreSQL权限管理与对象层次

角色

PostgreSQL以角色的方式来实现对权限的管理。在PostgreSQL中,不再有成员的概念,只有角色。为了便于理解,我们可以把与之对应的角色称为组角色成员角色

CREATE ROLE group1;
/*创建组角色group1,没有赋予login权限,所以这个角色是不可登陆的*/

CREATE ROLE member1 LOGIN PASSWORD 12345678 INHERIT;
/*创建成员角色member1*/
/*login:赋予了该角色可登录权限*/
/*PASSWORD:设置登录密码,可以不设置*/
/*INHERIT:可继承其他角色权限,不可继承为NOINHERIT,默认可继承*/

GRANT updata ON  accounts TO GROUP group1;
/*把对对象accounts的updata操作权限赋予组角色group1*/
REVOKE updata ON accouts FROM GROUP group1;
/*撤销*/

GRANT group1 TO member1;
/*赋予成员角色member1组角色grou[p1的权限*/
REVOKE group1 FROM member1;
/*撤销*/

在权限管理中,通常把多个用户角色赋予一个组角色,权限的赋予和撤销都从组角色进行。

对象

PostgreSQL中,对象层次分为:服务器-数据库-模式-表或其他类型对象。

对象被创建它的角色所有,其他角色默认没有对它的权限。

模式schema可以通过搜索路径search_path设置,默认值为"$user",public,即如果创建了同名模式会默认为同名模式,否则默认为public

不同模式下可创建同名表,比如public模式下创建了表t1,在zyj模式下还可以创建名为t1的表,不同模式下的对象不可见,访问时如果不做指定会默认访问当前模式下的表。

PostgreSQL权限管理与对象层次_第1张图片
PostgreSQL权限管理.png

postgres中:

  • 同时只能访问一个数据库,权限控制以数据库密码方式实现,与角色无关;
  • 同时可以访问多个模式,权限控制以角色方式实现,默认创建者拥有权限,其他角色需要授权;
  • 角色对于有权限的模式中没有权限的对象(角色zyj2对于public模式下的表t1),可见,但不可访问;
  • 角色对于没有权限的模式中的对象(角色zyj2对于zyj模式下的表t1),既不可见,也不可访问;

你可能感兴趣的:(PostgreSQL权限管理与对象层次)