用户与角色

在postgreSQL中,角色和用户是没有区别的,一个用户也是一个角色,可以把一个用户的权限赋予给另一个用户。用户和角色在整个数据库实例中是全局的,在同一个实例中的不同数据库中,看到的用户都是相同的。

在初始化数据库系统时有一个预定义的超级用户,这个用户的名称和初始化该数据库的操作系统用户名相同。

在pg中,用户和角色是没有区别的,除了create  user默认创建出来的用户有login权限,create  role创建出来的用户没有login权限之外,create rule与create  user没有其他的区别。

如何创建用户

CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:

SUPERUSER | NOSUPERUSER #是否是超级用户
| CREATEDB | NOCREATEDB #是否具有create database权限
| CREATEROLE | NOCREATEROLE #是否具有创建其他角色的权限
| INHERIT | NOINHERIT #创建的用户如果拥有角色,是否自动拥有角色权限
| LOGIN | NOLOGIN #是否有LOGIN权限
| REPLICATION | NOREPLICATION #复制权限
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp' #密码失效时间
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...] #with admin option权限
| USER role_name [, ...]
| SYSID uid


权限管理

在pg中,每个数据库的逻辑结构对象都有一个所有者,任何数据库对象都是属于某个用户的,所有不用把对象的权限再赋予所有者,因为所有者默认就拥有所有的权限。所有者也隐式的拥有把操作该对象的权限赋予其他用户的权利


权限分类

创建用户时指定的权限

超级用户权限

创建数据库权限

是否有login权限

也可以通过alter role来修改

需要grant或revoke的权限

在数据库中创建schema权限

允许在指定数据库中创建临时表的权限

连接某个数据库的权限

在模式中创建数据库对象的权限

select、DML操作权限

序列查询,函数使用,触发器权限

指定表,索引到表空间的权限

grant some_privileges on database_object_type object_name to role_name;
revoke some_privileges on database_object_type object_name from role_name;

role_name                指用户或者角色

some_privileges        指权限

database_object_type指数据库对象,如table、schema、sequence

grant select on table mytab to public;

pg没有DDL权限,是否创建表,是看在schema中是否具有create的权限。


权限总结

权限是按层次进行管理的

1)首先管理赋在用户特殊属性上的权限,如超级用户的权限,创建数据库的权限,创建用户的权限,LOGIN权限等。

2)然后是在数据库中创建模式的权限。

3)接着是在模式中创建数据库的对象的权限,创建表,索引等。

4)之后是查询表,向表中插入数据,更新表,删除表中的数据权限。

5)最后是操作表中的某些字段的权限