原文:https://www.enmotech.com/web/detail/1/774/1.html (复制链接,打开浏览器即可查看)
导读:本文为大家讲述了PostgreSQL数据库的用户及角色,希望对刚接触PostgreSQL数据库的朋友们有帮助。
一、角色
PostgreSQL使用角色的概念:管理数据库访问权限。根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色,以控制谁拥有访问哪些对象的权限。
1. 创建角色
语法:
CREATE ROLE name [ [ WITH ] option [ ... ] ]where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | 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 [, ...] | USER role_name [, ...] | SYSID uid
1) 角色属性:数据库角色有一系列的属性,这些属性定义了他们的权限。
- 登录权限:只有具有LOGIN属性的角色,才可以登陆(连接数据库)。具有LOG IN属性的角色实际上就是一个数据库用户。
- CREATE ROLE name LOGIN:等价于 CREATE USER name
- Superuser:数据库超级用户会绕过所有的权限检查。具有一切权限。
- CREATE ROLE name SUPERUSER(只有本身是超级用户才能执行)
- CREATEDB:创建数据库。
- REPLICATION:只能与LOGIN,同时指定。使用Replicate mode登录数据库或者创建删除replicate slots,需要该权限。
- CREATE ROLE name REPLICATION LOGIN.
2) 角色关系:通常情况下会把很多角色分成同一组去管理。比如把权限授予一个组,或者回收一个组的权限。一般加入组的用户不会授予LOGIN权限。
- CREATE ROLE name
- 创建ROLE之后,就可以grant,revoke成员。
- GRANT group_role TO role1, ... ;
- REVOKE group_role FROM role1, ... ;
- INHERIT:这些子句确定角色是否“继承”其所属角色的特权。一个具有INHERIT属性的角色可以自动使用任何数据库特权授予它直接或间接属于的所有角色。没有继承,加入另一个角色只授予将角色设置为该另一个角色的能力;另一方的特权角色只有在完成此操作后才可用。如果未指定,则默认为INHERIT。
2. 其他选项
- BYPASSRLS:绕过所有的行级别安全策略。
- CONNECTION LIMIT connlimit:限制用户登录次数,默认值-1(不限制)。
- [ ENCRYPTED ] PASSWORD 'password':设置登录密码。EN