1. 角色创建与删除
创建角色:
create role myrole;
删除角色:
drop role myrole;
除了SQL语句之外,PostgreSQL还提供了包装的命令createuser和dropuser来创建和删除角色。
createuser myrole
dropuser myrole
查看当前已创建的角色:
SELECT rolname FROM pg_roles;
或者
\\du
2. 角色的属性
角色可以拥有一些属性或者叫权限,比如登录数据库,需要角色拥有LOGIN属性,这类权限在创建角色的时候指定,或者通过alter role来修改。
示例:
create role myrole with login;
create role myrole with login SUPERUSER INHERIT CREATEDB CREATEROLE CONNECTION LIMIT 50 REPLICATION PASSWORD \’123456\’ VALID UNTIL \’2021-01-01\’;
修改属性:
alter role myrole nologin;
常用属性:
- SUPERUSER/NOSUPERUSER,创建出来的用户是否为超级用户,只有超级用户才能创建超级用户
- LOGIN/NOLOGIN,指定创建的用户是否有连接数据库的权限
- INHERIT/NOINHERIT,指定创建的用户是否继承某些角色的权限
- CREATEDB/NOCREATEDB,指定创建出来的用户是否有权限创建数据库
- CREATEROLE/NOCREATEROLE,指定创建出来的用户是否有创建其他角色的权限
- CONNECTION LIMIT connlimit,指定用户能够使用的最大并发连接数量,默认-1,表示没有限制
- REPLICATION,指定复制权限
- PASSWORD password,指定密码
- VALID UNTIL \’timestamp\’,指定密码失效时间,如果不指定,永远有效
- IN ROLE role_name,指定成为哪些角色的成员
- ROLE role_name,role_name将成为这个新建角色的成员
角色(role)和用户(user)可以等同使用,创建用户时,默认就已经带上了LOGIN属性,而角色默认没有带任何属性。
create user myuser;
myuser默认已经带了login属性。
3. 角色的权限:
角色的权限主要是对数据库对象(表,schema,trigger等)的操作权限,与角色的属性略有不同。权限使用grant或revoke进行管理。
示例1:将所有表的增删改查权限赋予角色
grant select,insert,update,delete on all tables in schema schema_name to role_name;
示例2:将某个表的增删改查权限赋予角色
grant select,insert,update,delete on table schema_name.tb to role_name;
示例3:移除权限:
revoke delete on all tables in schema schema_name from role_name;
常用权限汇总:
- SELECT
- INSERT
- UPDATE
- DELETE
- TRUNCATE
- REFERENCES
- TRIGGER
- CREATE
- CONNECT
- TEMPORARY
- EXECUTE
- USAGE
- ALL PRIVILEGES