数据库角色可以具有多个属性,定义其特权并与客户端身份验证系统交互。
只有具有LOGIN
属性的角色才能用作数据库连接的初始角色名称。
具有LOGIN
属性的角色可以被视为“数据库用户”的同义词。
要创建具有登录权限的角色,请使用以下任一方法:
CREATE ROLEname
LOGIN; CREATE USERname
;
(CREATE USER
等同于CREATE ROLE
,
但CREATE USER
默认包含LOGIN
,而CREATE ROLE
不包含。)
数据库超级用户绕过所有权限检查,除了登录权限。这是一个危险的特权,不应该随意使用;最好将大部分工作作为一个不是超级用户的角色来完成。
要创建一个新的数据库超级用户,使用CREATE ROLE
。您必须以已经是超级用户的角色来执行此操作。
name
SUPERUSER
角色必须明确获得权限才能创建数据库(超级用户除外,因为他们可以绕过所有权限检查)。
要创建这样的角色,请使用CREATE ROLE
。
name
CREATEDB
角色必须明确获得权限才能创建更多的角色(除了超级用户,因为他们可以绕过所有权限检查)。
要创建这样的角色,请使用CREATE ROLE
。
拥有name
CREATEROLECREATEROLE
特权的角色也可以修改和删除其他角色,以及授予或撤销其成员资格。
修改角色包括大多数可以使用ALTER ROLE
进行的更改,例如更改密码。
还包括可以使用COMMENT
和SECURITY LABEL
命令进行的对角色的修改。
然而,CREATEROLE
并不包含创建SUPERUSER
角色的能力,
也不包含对已经存在的SUPERUSER
角色的任何控制权。
此外,CREATEROLE
也不包含创建REPLICATION
用户的权力,
也不能授予或撤销REPLICATION
特权,也不能修改这些用户的角色属性。
然而,它允许在REPLICATION
角色上使用ALTER ROLE ... SET
和ALTER ROLE ... RENAME
,以及使用COMMENT ON ROLE
、SECURITY LABEL ON ROLE
和DROP ROLE
。
最后,CREATEROLE
也不授予授予或撤销BYPASSRLS
特权的能力。
因为CREATEROLE
权限允许用户授予或撤销即使在尚未具有任何访问权限的角色中的成员身份,一个CREATEROLE
用户可以获得对系统中每个预定义角色的功能的访问权限,包括高度特权角色,如pg_execute_server_program
和pg_write_server_files
。
一个角色必须明确被授予权限来启动流复制(除了超级用户,因为他们可以绕过所有权限检查)。
用于流复制的角色必须也具有LOGIN
权限。要创建这样的角色,使用
CREATE ROLE
。
name
REPLICATION
LOGIN
密码仅在客户端身份验证方法要求用户在连接到数据库时提供密码时才有意义。
password
和md5
身份验证方法都使用密码。
数据库密码与操作系统密码分开。在角色创建时指定密码为
CREATE ROLE
。
name
PASSWORD 'string
'
默认情况下,角色被授予继承其成员角色特权的权限。但是,要创建一个没有此权限的角色,
使用CREATE ROLE
。
name
NOINHERIT
一个角色必须明确获得权限来绕过每个行级安全(RLS)策略(除了超级用户,因为他们可以绕过所有权限检查)。
要创建这样一个角色,请使用CREATE ROLE
作为超级用户。
(意思是以超级用户执行这个命令)
name
BYPASSRLS
连接限制可以指定一个角色可以建立多少并发连接。
-1(默认值)表示没有限制。在创建角色时指定连接限制,使用
CREATE ROLE
。
name
CONNECTION LIMIT 'integer
'
角色的属性可以在创建后使用ALTER ROLE
进行修改。
查看有关CREATE ROLE和ALTER ROLE命令的参考页面以获取详细信息。
对于第 20 章中描述的运行时配置设置,一个角色也可以有角色相关的默认值。例如,如果出于某些原因你希望在每次连接时禁用索引扫描(提示:不是好主意),你可以使用:
ALTER ROLE myname SET enable_indexscan TO off;
这将保存设置(但是不会立刻设置它)。在这个角色的后续连接中,它就表现得像在会话开始之前执行过SET enable_indexscan TO off
。你也可以在会话期间改变该设置,它将只是作为默认值。要移除一个角色相关的默认设置,使用ALTER ROLE
。注意附加到没有rolename
RESET varname
LOGIN
权限的角色的角色相关默认值相当无用,因为它们从不会被调用。