name
新角色的名称
SUPERUSER
NOSUPERUSER
这些子句决定一个新角色是否为"超级用户",这种用户可以超越数据库中的所有访问权限。超级用户状态是非常危险的,除非真正需要,否则不应该使用。如果没有声明,你自己必须是一个超级用户才能创建一个新的超级用户。如果没有指定,NOSUPERUSER 将是缺省。
CREATEDB
NOCREATEDB
这些子句定义一个角色是否能创建数据库。如果声明了 CREATEDB ,那么正在创建的角色可以创建新数据库。声明 NOCREATEDB 将不会赋与新角色创建数据库的能力。如果没有声明,那么缺省是 NOCREATEDB
CREATEROLE
NOCREATEROLE
这些子句决定一个角色是否可以创建新角色(也就是执行 CREATE ROLE)。一个拥有 CREATEROLE 权限的角色也可以修改和删除其它角色。如果没有声明,缺省是 NOCREATEROLE
CREATEUSER
NOCREATEUSER
这些子句已经过时了,但是仍然接受,拼法为 SUPERUSER 和 NOSUPERUSER 。请注意它们并不等于 CREATEROLE !人们很可能轻易地这么认为。
INHERIT
NOINHERIT
这些子句决定一个角色是否"继承"它所在组的角色的权限。一个带有 INHERIT 属性的角色可以自动使用已经赋与它直接或间接所在组的任何权限。没有 INHERIT ,其它角色的成员关系只赋与该角色 SET ROLE 成其它角色的能力;其它角色的权限只是在这么做了之后才能获得。如果没有声明,缺省是 INHERIT
LOGIN
NOLOGIN
这些子句决定一个角色是否可以登录;也就是说,该角色在客户端连接的时候是否可以被给予初始化会话的认证名字。一个拥有 LOGIN 属性的角色可以认为是一个用户。没有这个属性的角色可以用于管理数据库权限,但是并不是平常概念的用户。如果没有声明,除非是调用 CREATE ROLE 的别名 CREATE USER,否则缺省将是 NOLOGIN
CONNECTION LIMIT connlimit
如果角色可以登录,这个参数声明该角色可以使用的并发连接数量。-1(缺省)意味着没有限制。
PASSWORD password
设置角色的口令。口令只对那些拥有 LOGIN 属性的角色有意义,不过你当然可以给没有这个属性的用户定义口令。如果你不准备使用口令认证,你可以忽略这个选项。如果没有指定口令,口令将被设为空并且该用户的密码认证将总是失败。也可以明确的用 PASSWORD NULL 指定口令为空。
ENCRYPTED
UNENCRYPTED
这些关键字控制存储在系统表里面的口令是否加密。如果没有指定,那么缺省的行为由配置参数 password_encryption 控制。因为系统无法对指定的口令字符串进行解密,所以如果目前的口令字符串已经是用 MD5 加密的格式,那么那就会继续照此存放,而不管是否声明了 ENCRYPTED 或 UNENCRYPTED 。这样就允许在转储/回复的时候重新加载加密的口令。
请注意老的客户端可能缺乏对 MD5 认证机制的支持,以密文形式存储的口令需要这个机制来运作。
VALID UNTIL 'timestamp'
VALID UNTIL 子句设置角色的口令失效的时间戳。如果忽略了这个子句,那么口令将永远有效。
IN ROLE rolename
IN ROLE 子句列出一个或多个现有的角色,新角色将立即加入这些角色,成为它们的成员。请注意没有任何选项可以把新角色添加为管理员;必须使用独立的 GRANT 命令来做这件事情。
IN GROUP rolename
IN GROUP 是 IN ROLE 的过时的拼法。
ROLE rolename
ROLE 子句列出一个或多个现有的角色,它们将自动添加为这个新角色的成员。这个动作实际上就是把新角色做成一个"组"。
ADMIN rolename
ADMIN 子句类似 ROLE ,只是给出的角色被增加到新角色 WITH ADMIN OPTION ,给他们以把这个角色的成员权限赋与其它角色的权力。
USER rolename
USER 子句是 ROLE 子句的过时拼法。
SYSID uid
SYSID 子句将被忽略,但是仍然接受之,主要为了向下兼容。