目录
角色概念
查询现有角色
列出当前角色
创建角色
删除角色
更改角色
创建角色举例
预定义角色
角色属性
登陆角色
超级用户角色
创建数据库角色
创建role角色
复制角色
创建带有密码的角色
角色成员关系
角色组概念
角色组增加成员
角色组移除成员
删除角色
默认角色
PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。
角色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全不同的两种实体,但是现在只有角色。任意角色都可以扮演用户、组或者两者。
重点:角色 == 用户 或 角色 == 用户组
select rolname from pg_roles;
\du
create role name;
等同于
create user name;
drop role name;
等同于
drop user name;
ALTER ROLE — 更改一个数据库角色;
alter role role3 login;
只有登录权限的角色
create role onlylogin LOGIN;
具有创建数据库 创建角色 登录的角色
create user admin with CREATEDB CREATEROLE;
创建一个带有密码 并且 密码有效期截止到2025-01-01的角色
CREATE ROLE testlogin WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2025-01-01';
为了引导数据库系统,一个刚刚被初始化好的系统总是包含一个预定义角色。这个角色总是一个“superuser”,并且默认情况下(除非在运行initdb
时修改)它的名字和初始化数据库集簇的操作系统用户相同。习惯上,这个角色将被命名为postgres
。为了创建更多角色,你首先必须以初始角色的身份连接。
重点:超级用户和初始化数据库的操作系统用户名称相同,一般是postgres。
CREATE ROLE name LOGIN; 等同于 CREATE USER name;
CREATE USER
和CREATE ROLE
等效,除了CREATE USER
默认带有LOGIN
,而CREATE ROLE创建的角色不带有LOGIN
一个数据库超级用户会绕开所有权限检查。这是一个危险的权限并且应该小心使用,最好用一个不是超级用户的角色来完成你的大部分工作,创建该角色的用户必须是一个超级用户。
CREATE ROLE name
SUPERUSER
一个角色必须被显式给予创建数据库的权限才能创建数据库
CREATE ROLE
name
CREATEDB;
一个角色必须被显式给予权限才能创建更多角色(除了超级用户,因为它们会绕开所有权限检查)。一个带有CREATEROLE
权限的角色也可以修改和删除其他角色,还可以授予或回收角色中的成员关系。然而,要创建、修改、删除或修改一个超级用户角色的成员关系,需要以超级用户的身份操作。CREATEROLE
不足以完成这一切
CREATE ROLE name
CREATEROLE
一个角色必须被显式给予权限才能发起流复制(除了超级用户,因为它们会绕开所有权限检查)。一个被用于流复制的角色必须也具有LOGIN
权限。
CREATE ROLE
。name
REPLICATION LOGIN
CREATE ROLE
name
PASSWORD 'string
';
把用户分组在一起来管理权限常常很方便:那样,权限可以被授予一整个组或从一整个组回收。在PostgreSQL中通过创建一个表示组的角色来实现,并且然后将在该组角色中的成员关系授予给单独的用户角色。
创建角色组和创建角色相同
CREATE ROLE name;
向角色组 group_role 中增加曾院 role1 ;role1 和 group_role组具有相同角色
GRANT group_role TO role1, ... ;
REVOKE group_role FROM role1, ... ;
角色 | 允许的访问 |
---|---|
pg_read_all_settings | 读取所有配置变量,甚至是那些通常只对超级用户可见的变量。 |
pg_read_all_stats | 读取所有的pg_stat_*视图并且使用与扩展相关的各种统计信息,甚至是那些通常只对超级用户可见的信息。 |
pg_stat_scan_tables | 执行可能会在表上取得ACCESS SHARE 锁的监控函数(可能会持锁很长时间)。 |
pg_monitor | 读取/执行各种不同的监控视图和函数。 这角色是pg_read_all_settings ,pg_read_all_stats 和pg_stat_scan_tables 的成员。 |
pg_signal_backend | 发信号到其他后端以取消查询或中止它的会话。 |
pg_read_server_files | 允许使用COPY以及其他文件访问函数从服务器上该数据库可访问的任意位置读取文件。 |
pg_write_server_files | 允许使用COPY以及其他文件访问函数在服务器上该数据库可访问的任意位置中写入文件。 |
pg_execute_server_program | 允许用运行该数据库的用户执行数据库服务器上的程序来配合COPY和其他允许执行服务器端程序的函数。 |
参考
ALTER ROLE