CREATE USER

Name

CREATE USER -- 创建一个新的数据库用户帐户

Synopsis

CREATE USER name [ [ WITH ] option [ ... ] ]

这里 option 可以是∶

      SYSID uid
    | CREATEDB | NOCREATEDB
    | CREATEUSER | NOCREATEUSER
    | IN GROUP groupname [, ...]
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'abstime'

描述

CREATE USER 向一个 PostgreSQL 数据库集群增加一个新用户。 参考 Chapter 17Chapter 19 获取关于管理用户和认证的信息。 要执行这条命令,你必须是一个数据库超级用户。

参数

name

新用户名

uid

SYSID 子句可以用于选择新用户的 PostgreSQL 用户标识。 通常这是不必要的,但是如果你想恢复一个孤儿对象的所有者,也许这个很有用。

如果没有声明这个,缺省使用已分配的最高用户标识加一(最小是 100)。

CREATEDB
NOCREATEDB

这个子句定义用户的创建数据库权限。 如果声明了CREATEDB, 被定义的用户将允许创建其自己的数据库。 而使用NOCREATEDB将否决该用户的创建数据库的能力。 如果没有声明,缺省是NOCREATEDB

CREATEUSER
NOCREATEUSER

该子句决定一个用户是否能创建一个新的用户。 CREATEUSER 将把此用户变成数据库超级用户,可以跨越所有访问限制。省略这个参数将置用户的这个属性为 NOCREATEUSER

groupname

一个组名称,把这个用户设为该组成员。 你可以列出多个组名字。

password

设置用户的口令,如果你不准备使用口令认证, 那么你可以省略这个选项,但如果你想切换到一个口令认证的服务器,那么该用户将不能联接。 此口令可以稍后再次设置或者修改,使用 ALTER USER

ENCRYPTED
UNENCRYPTED

ENCRYPTED/UNENCRYPTED 控制口令在数据库中是否以加密形式存储在系统表中。 (如果两个都没有设置,那么缺省的特性是由配置参数 password_encryption 决定的。) 如果提供的字串已经是 MD5 加密的格式,那么就照原样存储, 不管声明的是 ENCRYPTED 还是 UNENCRYPTED (因为系统无法解密制定的加密口令字串)。 这样就允许在转储/恢复的过程中重载加密后的口令。

请注意老的客户端可能缺少 MD5 认证机制,我们需要这个认证机制处理存储为密文的口令。

abstime

VALID UNTIL(有效期)子句设置一个绝对时间, 过了该时间后用户的口令将不再有效。 如果省略这个子句,登陆将总是有效的。

注意

使用 ALTER USER 修改用户的口令和权限, DROP USER 删除一个用户。 使用 ALTER GROUP 从组中增加或删除用户。

PostgreSQL 里有一个程序 createuserCREATE USER 有相同的功能(实际上,它调用这条命令), 但是可以在命令行上运行。

例子

创建一个没有口令的用户:

CREATE USER jonathan

创建一个有口令的用户:

CREATE USER davide WITH PASSWORD 'jw8s0F4'

创建一个有口令的用户,其帐号在 2004 年底失效。 注意当 2005 年走过一秒后,该帐号将不再有效:

CREATE USER miriam WITH PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';

创建一个拥有创建数据库权限的用户:

CREATE USER manuel WITH PASSWORD 'jw8s0F4' CREATEDB

兼容性

CREATE USER 语句是 PostgreSQL 扩展。 SQL 标准把用户的定义交给具体实现处理。

VALID UNTIL 子句只是为一个口令定义一个失效时间, 而不是给用户帐号定义这个时间。特别要注意的是,如果以非口令认证的方式登录, 那么,失效时间不是强制执行的。

又见

ALTER USER, DROP USER, createuser