createuser

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# createuser

## 名称

createuser -- 创建一个新的PostgreSQL用户帐户

## 大纲

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

## 描述

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

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

createuser是对 SQL命令CREATE ROLE的封装。 因此，用哪种方法创建的用户都一样。

## 选项

createuser接受下列命令行参数：

`username`

  指定要创建的PostgreSQL用户名称。 此名称必须与本 PostgreSQL安装的所有现有角色不同。

`-c `number``
`--connection-limit=`number``

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

`-d`
`--createdb`

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

`-D`
`--no-createdb`

  禁止该新用户创建数据库。这是缺省（设置）。

`-e`
`--echo`

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

`-E`
`--encrypted`

  加密存储在数据库中的用户的密码。 如果没有指定，使用缺省设置。

`-g `role``
`--role=`role``

  表名该角色将立即作为新成员添加。可以通过写多个`-g` 选项添加多个这样的角色作为成员。

`-i`
`--inherit`

  该新角色将自动继承其所属角色组的权限。这是缺省（设置）。

`-I`
`--no-inherit`

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

`--interactive`

  若没有在命令行上指定用户名，提示缺少用户名。并且 `-d`/`-D`, `-r`/`-R`, `-s`/`-S`选项任何属性没有在命令行指定，也会提示缺少属性（而不会使用缺省值）。 （PostgreSQL 9.1以前这是缺省的设置。）

`-l`
`--login`

  该新用户将允许登录（也就是说，用户名可以作为初始会话的用户标识符）。这是缺省（设置）。

`-L`
`--no-login`

  该新用户将不允许登录。 （作为管理数据库权限的手段，（设置）没有登录权限的角色仍然是有必要的。）

`-N`
`--unencrypted`

  不加密存储在数据库中的用户的密码。 如果没有指定，使用缺省设置

`-P`
`--pwprompt`

  如果给出（此选项），createuser将提示输入新用户的密码。 如果不准备使用密码认证方式，那么没必要这么做。

`-r`
`--createrole`

  该新用户将允许创建新角色 （即，该用户将拥有`CREATEROLE`权限）。

`-R`
`--no-createrole`

  该新用户将不能创建新角色。这是缺省（设置）。

`-s`
`--superuser`

  该新用户将是一个超级用户。

`-S`
`--no-superuser`

  该新用户将不是一个超级用户。这是缺省（设置）。

`-V`
`--version`

  输出createuser命令的版本信息，然后退出。

`--replication`

  该新用户将拥有`REPLICATION`权限（即角色能启动复制）， 完整的描述见文档CREATE ROLE。

`--no-replication`

  该新用户将没有`REPLICATION`权限（即角色不能启动复制）， 完整的描述见文档CREATE ROLE。

`-?`
`--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支持的环境变量(见 第 31.14 节)。

## 诊断

如果有问题，将会显示后端错误消息。参阅CREATE ROLE 和psql获取可能的问题和错误消息的描述。 数据库服务端必须运行在目标主机。此外，前端库 libpq中的所有缺省连接设置和环境变量都将适用。

## 示例

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

    $ createuser joe

在缺省数据库服务器上创建一个带有某些额外属性提示的用户`joe`：

    $ createuser --interactive 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`端口5000的服务端里创建（跟上例）一样`joe`用户， 明确指定属性，请看下列命令：

    $ 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`密码将会回显出来 （也可能在服务器日志和其他地方）， 所以在其他人能看到你的屏幕的时候不要使用`-e`选项。

## 又见

dropuser, CREATE ROLE

上一页 | 起始页 | 下一页
createlang | 上一级 | dropdb