数据库角色拥有一系列特权属性,用于定义其全局权限边界并与客户端身份认证系统联动:
只有被赋予了 LOGIN 属性的角色才能作为客户端连接会话的初始登录身份。具备该属性的角色可以被视为传统意义上的“数据库用户”。创建具备登录权限的角色:
CREATE ROLEnameLOGIN; CREATE USERname;
(CREATE USER 在语法和语义上等价于 CREATE ROLE,唯一的微小差异在于前者默认内置携带了 LOGIN 属性)。
数据库超级用户会跳过除登录权之外的系统全部内部权限检查,拥有无限制的绝对控制权。这是一项极高危的特权,在日常业务开发中应当极为克制地使用,严禁在业务应用连接中使用超级用户。创建超级用户角色使用 CREATE ROLE ,且执行该命令的调用者自身必须已是超级用户。
name SUPERUSER
普通角色必须被显式赋予该特权才能创建新数据库:CREATE ROLE 。
name CREATEDB
允许该角色创建、修改和删除其他普通角色:CREATE ROLE 。
具备 name CREATEROLECREATEROLE 特权的用户可以修改和删除被授予其管理权限的角色(包括修改其密码)。但需要强调的是,CREATEROLE 用户严禁创建或管理任何超级用户角色,也不具备分发 REPLICATION 或 BYPASSRLS 越级特权的权力。
允许角色发起物理流复制或逻辑复制连接:CREATE ROLE 。用于搭建高可用备库和只读副本连接。
name REPLICATION LOGIN
为角色指定用于身份验证的加密口令哈希(如 SCRAM-SHA-256):CREATE ROLE 。
name PASSWORD 'string'
角色在默认情况下会自动继承其所属父组角色的所有权限。若要创建一个不自动继承父级权限的严格隔离角色,使用 CREATE ROLE 。
name NOINHERIT
允许角色直接穿透并绕过整库所有的行安全性(RLS)策略。必须由超级用户显式授予:CREATE ROLE 。
name BYPASSRLS
限制该角色所能建立的最大并发连接数。默认值 -1 代表不设上限。指定连接配额:CREATE ROLE 。
name CONNECTION LIMIT 'integer'
角色创建完成后,可以通过 ALTER ROLE 命令随时动态修改这些属性,详见 ALTER ROLE。
角色还可以绑定专属的运行时参数默认配置。例如为特定报表分析角色单独调大工作内存或禁用特定算子:
ALTER ROLE report_user SET work_mem TO '64MB';