角色
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的表,不同模式下的对象不可见,访问时如果不做指定会默认访问当前模式下的表。
postgres中:
- 同时只能访问一个数据库,权限控制以数据库密码方式实现,与角色无关;
- 同时可以访问多个模式,权限控制以角色方式实现,默认创建者拥有权限,其他角色需要授权;
- 角色对于有权限的模式中没有权限的对象(角色
zyj2
对于public
模式下的表t1),可见,但不可访问; - 角色对于没有权限的模式中的对象(角色
zyj2
对于zyj
模式下的表t1),既不可见,也不可访问;