🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# createuser ## Name createuser -- 创建一个新的PostgreSQL用户帐户 ## Synopsis `createuser` [`_connection-option_`...] [`_option_`...] [`_username_`] ## 描述 createuser创建一个新的PostgreSQL 用户(更准确地说是一个角色)。 只有超级用户和具有`CREATEROLE`权限的用户可以创建新的用户。 因此createuser必须由超级用户或者是具有 `CREATEROLE`权限的用户执行。 如果你想创建一个新的超级用户,你必须以超级用户身份连接, 而不仅仅是一个有`CREATEROLE`权限的用户。 成为超级用户就意味着将在数据库里绕开所有访问权限检查,因此,不要轻易授予超级用户权限。 createuser是对 SQL命令[CREATE ROLE](#calibre_link-10)的封装。 因此,用哪种方法创建的用户都一样。 ## 选项 createuser接受下列命令行参数: `_username_` 指定要创建的PostgreSQL用户名称。 此名称必须与本 PostgreSQL安装的所有现有角色不同。 `-c` `_number_``--connection-limit=``_number_` 为新用户设置最大数目的连接限制。缺省为无限制。 `-d` `--createdb` 允许该新用户创建数据库。 `-D` `--no-createdb` 禁止该新用户创建数据库。这是缺省(设置)。 `-e` `--echo` 回显createuser生成并发送到服务端的命令。 `-E` `--encrypted` 加密存储在数据库中的用户的密码。 如果没有指定,使用缺省设置。 `-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](#calibre_link-10)。 `--no-replication` 该新用户将没有`REPLICATION`权限(即角色不能启动复制), 完整的描述见文档[CREATE ROLE](#calibre_link-10)。 `-?` `--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.14](#calibre_link-39))。 ## 诊断 如果有问题,将会显示后端错误信息。参阅[CREATE ROLE](#calibre_link-10) 和[psql](#calibre_link-23)获取可能的问题和错误消息的描述。 数据库服务端必须运行在目标主机。此外,前端库 libpq中的所有缺省连接设置和环境变量都将适用。 ## 示例 在缺省数据库服务器上创建一个`joe`用户: ``` <samp class="literal">$</samp> <kbd class="literal">createuser joe</kbd> ``` To create a user `joe` on the default database server with prompting for some additional attributes: ``` <samp class="literal">$</samp> <kbd class="literal">createuser --interactive joe</kbd> <samp class="literal">Shall the new role be a superuser? (y/n)</samp> <kbd class="literal">n</kbd> <samp class="literal">Shall the new role be allowed to create databases? (y/n)</samp> <kbd class="literal">n</kbd> <samp class="literal">Shall the new role be allowed to create more new roles? (y/n)</samp> <kbd class="literal">n</kbd> ``` 在主机`eden`端口5000的服务端里创建(跟上例)一样`joe`用户, 明确指定属性,请看下列命令: ``` <samp class="literal">$</samp> <kbd class="literal">createuser -h eden -p 5000 -S -D -R -e joe</kbd> <samp class="literal">CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;</samp> ``` 创建超级用户`joe`,并立即指定一个密码: ``` <samp class="literal">$</samp> <kbd class="literal">createuser -P -s -e joe</kbd> <samp class="literal">Enter password for new role:</samp> <kbd class="literal">xyzzy</kbd> <samp class="literal">Enter it again:</samp> <kbd class="literal">xyzzy</kbd> <samp class="literal">CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;</samp> ``` 在上面例子中,虽然新密码在输入的时候实际上并不会回显出来,但是我们还是明确的把它显示出来了。 正如你看到的,密码是加密后发送到客户端。 如果使用选项`--unencrypted`密码将会回显出来 (也可能在服务器日志和其他地方), 所以在其他人能看到你的屏幕的时候不要使用`-e`选项。 ## 另请参阅 [dropuser](#calibre_link-45), [CREATE ROLE](#calibre_link-10)