20.2. 角色属性
一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。
登陆权限
只有具有LOGIN
属性的角色才可以用作数据库连接的初始角色名。 一个带有LOGIN
属性的角色可以认为是和"数据库用户"相同的事物。 要创建一个具有登录权限的角色,用下列之一:
CREATE ROLE _name_ LOGIN;
CREATE USER _name_;
除了CREATE USER
默认赋予LOGIN
之外,CREATE USER
等价于CREATE ROLE
(默认不赋予CREATE ROLE
)。
超级用户状态
数据库超级用户超越所有权限检查。这是一个危险的权限,应该小心使用; 最好使用非超级用户完成你的大多数工作。要创建数据库超级用户, 用CREATE ROLE
_name_
SUPERUSER命令。 你必须用已经是超级用户的角色执行这条命令。
创建数据库
角色要想创建数据库,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)。 要创建这样的角色,用CREATE ROLE
_name_
CREATEDB命令。
创建角色
角色要想创建角色,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)。 要创建这样的角色,用CREATE ROLE
_name_
CREATEROLE 命令。一个带有CREATEROLE
权限的角色也可以更改和删除其它角色, 以及给其它角色赋予或者撤销成员关系。不过,要创建、更改、删除一个超级用户角色的成员关系, 需要具有超级用户属性;只有CREATEROLE
还不够。
启动复制
角色要想启动流复制,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)。 用于流复制的角色必须总是拥有LOGIN
权限。要创建这样的角色, 使用CREATE ROLE
_name_
REPLICATION LOGIN命令。
口令
只有在客户认证方法要求与数据库建立连接必须使用口令的时候,口令才比较重要。 password
和md5
认证方法使用口令。数据库口令与操作系统口令是无关的。 在创建角色的时候可以这样声明一个口令:CREATE ROLE
_name_
PASSWORD '_string_
'。
一个角色的属性可以在创建后用ALTER ROLE
修改。参考CREATE ROLE 和ALTER ROLE的手册获取细节。
Tip: 创建一个具有
CREATEDB
和CREATEROLE
权限, 但是并非超级用户的角色是一个很好的习惯,你可以使用这个角色进行所有日常的数据库和角色管理。 这个方法避免了以超级用户操作时,发生误操作导致的严重后果。
一个角色也可以为许多运行时配置设置针对其个人的缺省,那些配置在Chapter 18里描述。 比如,如果出于某种原因你想在所有你做的连接中关闭索引扫描(不是个好主意),你可以用:
ALTER ROLE myname SET enable_indexscan TO off;
这样就会保存该设置(但是不是立即设置)。然后,在这个角色随后的连接中就好像在会话开始之后都立即 SET enable_indexscan TO off
了一样。你也可以在会话中修改这个设置; 它只是缺省。要撤销任何这样的设置,使用ALTER ROLE
_rolename_
RESET _varname_
。 请注意,对那些没有LOGIN
属性的角色,这些角色相关的缺省值几乎没什么用, 因为它们从来不会被调用。