createuser

Name

createuser -- 定义一个新PostgreSQL用户帐户

Synopsis

createuser [connection-option...] [option...] [username]

描述

createuser创建一个新的PostgreSQL 用户(更准确地说是一个角色)。 只有超级用户和有CREATEROLE权限的用户可以创建新的用户。 因此,createuser必须由超级用户或者是有CREATEROLE 权限的用户执行。

如果你希望创建一个新的超级用户,你必须以超级用户身份连接, 而不仅仅是一个有CREATEROLE权限的用户。 成为超级用户就意味着将在数据库里绕开所有访问权限检查,因此,不要轻易赋予超级用户权限。

createuserSQL命令CREATE ROLE的封装。 因此,这两种方法创建的新用户没什么差别。

选项

createuser接受下列命令行参数:

username

要创建的PostgreSQL角色名称。 该名称必须在该PostgreSQL安装的所有角色中唯一。

-c number
--connection-limit number

为新用户设置最大数目的连接数。缺省为无限制。

-d
--createdb

允许该新建用户创建数据库

-D
--no-createdb

禁止该新建用户创建数据库。

-e
--echo

回显createuser生成并发送到服务器的命令。

-E
--encrypted

对用户存储在数据库里的口令进行加密。如果没有声明,使用缺省的口令行为。

-i
--inherit

新角色将自动继承其所属角色组的权限。这个是缺省。

-I
--no-inherit

新角色将不会自动继承他所属角色组的权限。

-l
--login

新用户将允许登录,也就是说,用户名可以用作初始会话的用户标识。这个是缺省。

-L
--no-login

新用户将不允许登录。一个不能登录的角色仍然是很有用的,比如用于权限管理。

-N
--unencrypted

不要加密用户存储在数据库里的口令。如果没有声明,使用缺省的口令行为。

-P
--pwprompt

如果给出,createuser将发出一个提示符要求输入新用户的口令。 如果你不打算用口令认证,那么这是不必要的。

-r
--createrole

新用户将被允许创建新角色,也就是说,这个用户将有CREATEROLE权限。

-R
--no-createrole

新用户将不允许创建新角色。

-s
--superuser

表明新用户将是超级用户

-S
--no-superuser

新用户将不是超级用户。

-V
--version

输出createuser版本并退出。

-?
--help

显示关于createuser命令行参数的帮助并退出。

如果没有在命令行上声明必须的信息,程序会提示你输入。

createuser还接受下列命令行参数作为连接参数:

-h host
--host host

指定运行服务器的主机名。如果数值以斜杠开头,则被用作到Unix域套接字的路径。

-p port
--port port

指定服务器正在侦听的TCP端口或本地Unix域套接字文件的扩展(描述符)

-U username
--username username

连接的用户名(不是要创建的用户名)

-w
--no-password

不发布密码提示。若服务器请求密码认证并且一个密码不能通过像 .pgpass文件这样的其他方式来获得,连接 尝试将失败。该选项在批量作业和脚本中是有效的,在目前没有用 户输入密码的地方。

-W
--password

强制createuser在连接到数据库之前提示密码。

该选项从不是最重要的,尽管若服务器请求密码认证 createuser会自动提示密码。然而, createuser将浪费一个连接尝试来发现服务器想 要一个密码。在一些情况下,输入-W来避免额外的连接尝试。

环境变量

PGHOST
PGPORT
PGUSER

缺省连接参数

这个实用程序,跟大多数其他PostgreSQL实用程序一样,也试用 libpq支持的环境变量。(参阅Section 31.13)。

诊断

如果出现问题,将会显示后端错误信息。 参阅CREATE ROLEpsql获取可用信息的描述。数据库服务器必须在目标主机上运行。 同样,任何libpq 前端库使用的缺省连接设置和环境变量都将适用。

例子

在缺省数据库服务器上创建一个joe用户:

$ createuser joe
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

用在主机eden上的服务器里创建joe用户, 端口是5000,避免提示并且回显执行的命令:

$ createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

把用户joe创建为超级用户,并且立即赋予口令:

$ createuser -P -s -e joe
Enter password for new role: xyzzy
Enter it again: xyzzy
CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;

在上面例子中,虽然新口令在输入的时候实际上并不会实际显示出来, 但是我们还是明确的把它显示出来了。 正如你所看到的,密码在发送给客户之前会加密。若果选项--unencrypted 被使用,密码will会出现在回送命令中(并且也可能在服务器日志或其他地方), 所以你在那种情况下您不想使用-e,倘若任何其他人都能看到你的屏幕。

又见

dropuser, CREATE ROLE