超级用户:类似于其他系统的sa、root、sysdba
- initdb.exe 初始化是建立的第一个superuser 的名字 和 执行initdb.exe是的os帐号相同
- 第一个superuser的oid=10
- superuser是不受postgresq的对象权限系统控制的,可以在系统里做任何事情!危险!!
对象的所有者owner:很特殊的角色
- 对象的权限系统是对象上权限的有限集合,但有些权限是无法grant、revoke的,这就是owner所特性的:owner用户很多普通用户不具备的权利
- owner权限可以有superuser来转移
postgresql自8.1后不再区分用户、组了。统统称之为角色role
- role是和数据库无关的
- role就是权限的集合
- role可以互相交叉、继承、被赋于对象权限
特殊的public角色 :属于所有role的公共角色
- create role role_name [login createdb super iherit ...]
- create user role_name 等于 create role role_name login
- drop role
- grant {all| priviliges} on object to role_name
- revoke {all| priviliges} on object from role_name
From:http://www.cnblogs.com/jinzhenshui/archive/2009/06/29/1513074.html
角色:
sql>create role role1 noinherit password '1234';
sql>GRANT CONNECT ON DATABASE testljs TO role1;
sql>grant connect on schema testljs to role1;
用户:
sql>create role user1 login noinherit password '1234';
sql>grant connect on database testljs to role1;
sql>grant connect on schema testljs to role1; -- schema usage
sql>revoke connect on database testljs from user1; --
sql>connect user1/1234@localhost:5444/testljs
; --ok
sql>revoke connect from user1;
sql>connect user1/1234@localhost:5444/testljs
; --faile
sql>grant connect to role1; -- ok 可以连接
GRANT group1 TO user1;
sql>create role role2 noinherit password '1234';
sql>create role user2 login noinherit password '1234';
sql>revoke connect from user2;
sql>grant role2 to user2;
sql>revoke connect from role2;
sql>grant connect to role2;
sql>revoke connect from role1;
sql>grant role2 to role1;