PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

21.2. 角色属性 #

数据库角色拥有一系列特权属性,用于定义其全局权限边界并与客户端身份认证系统联动:

登录权限(LOGIN)

只有被赋予了 LOGIN 属性的角色才能作为客户端连接会话的初始登录身份。具备该属性的角色可以被视为传统意义上的“数据库用户”。创建具备登录权限的角色:

CREATE ROLE name LOGIN;
CREATE USER name;

(CREATE USER 在语法和语义上等价于 CREATE ROLE,唯一的微小差异在于前者默认内置携带了 LOGIN 属性)。

超级用户特权(SUPERUSER)

数据库超级用户会跳过除登录权之外的系统全部内部权限检查,拥有无限制的绝对控制权。这是一项极高危的特权,在日常业务开发中应当极为克制地使用,严禁在业务应用连接中使用超级用户。创建超级用户角色使用 CREATE ROLE name SUPERUSER,且执行该命令的调用者自身必须已是超级用户。

创建数据库特权(CREATEDB)

普通角色必须被显式赋予该特权才能创建新数据库:CREATE ROLE name CREATEDB。

创建角色特权(CREATEROLE)

允许该角色创建、修改和删除其他普通角色:CREATE ROLE name CREATEROLE。 具备 CREATEROLE 特权的用户可以修改和删除被授予其管理权限的角色(包括修改其密码)。但需要强调的是,CREATEROLE 用户严禁创建或管理任何超级用户角色,也不具备分发 REPLICATION 或 BYPASSRLS 越级特权的权力。

流复制特权(REPLICATION)

允许角色发起物理流复制或逻辑复制连接:CREATE ROLE name REPLICATION LOGIN。用于搭建高可用备库和只读副本连接。

密码(PASSWORD)

为角色指定用于身份验证的加密口令哈希(如 SCRAM-SHA-256):CREATE ROLE name PASSWORD 'string'。

权限继承(INHERIT)

角色在默认情况下会自动继承其所属父组角色的所有权限。若要创建一个不自动继承父级权限的严格隔离角色,使用 CREATE ROLE name NOINHERIT。

绕过行级安全(BYPASSRLS)

允许角色直接穿透并绕过整库所有的行安全性(RLS)策略。必须由超级用户显式授予:CREATE ROLE name BYPASSRLS。

连接数配额(CONNECTION LIMIT)

限制该角色所能建立的最大并发连接数。默认值 -1 代表不设上限。指定连接配额:CREATE ROLE name CONNECTION LIMIT 'integer'。

角色创建完成后,可以通过 ALTER ROLE 命令随时动态修改这些属性,详见 ALTER ROLE。

角色还可以绑定专属的运行时参数默认配置。例如为特定报表分析角色单独调大工作内存或禁用特定算子:

ALTER ROLE report_user SET work_mem TO '64MB';