createuser创建一个新的PostgreSQL 用户(更准确地说是一个角色)。 只有超级用户和具有CREATEROLE权限的用户可以创建新的用户。 因此createuser必须由超级用户或者是具有 CREATEROLE权限的用户执行。
如果你想创建一个新的超级用户,你必须以超级用户身份连接, 而不仅仅是一个有CREATEROLE权限的用户。 成为超级用户就意味着将在数据库里绕开所有访问权限检查,因此,不要轻易授予超级用户权限。
createuser是对 SQL命令CREATE ROLE的封装。 因此,用哪种方法创建的用户都一样。
createuser接受下列命令行参数:
指定要创建的PostgreSQL用户名称。 此名称必须与本 PostgreSQL安装的所有现有角色不同。
为新用户设置最大数目的连接限制。缺省为无限制。
允许该新用户创建数据库。
禁止该新用户创建数据库。这是缺省(设置)。
回显createuser生成并发送到服务端的命令。
加密存储在数据库中的用户的密码。 如果没有指定,使用缺省设置。
表名该角色将立即作为新成员添加。可以通过写多个-g 选项添加多个这样的角色作为成员。
该新角色将自动继承其所属角色组的权限。这是缺省(设置)。
该新角色将不会自动继承他所属角色组的权限。
若没有在命令行上指定用户名,提示缺少用户名。并且 -d/-D, -r/-R, -s/-S选项任何属性没有在命令行指定,也会提示缺少属性(而不会使用缺省值)。 (PostgreSQL 9.1以前这是缺省的设置。)
该新用户将允许登录(也就是说,用户名可以作为初始会话的用户标识符)。这是缺省(设置)。
该新用户将不允许登录。 (作为管理数据库权限的手段,(设置)没有登录权限的角色仍然是有必要的。)
不加密存储在数据库中的用户的密码。 如果没有指定,使用缺省设置
如果给出(此选项),createuser将提示输入新用户的密码。 如果不准备使用密码认证方式,那么没必要这么做。
该新用户将允许创建新角色 (即,该用户将拥有CREATEROLE权限)。
该新用户将不能创建新角色。这是缺省(设置)。
该新用户将是一个超级用户。
该新用户将不是一个超级用户。这是缺省(设置)。
输出createuser命令的版本信息,然后退出。
该新用户将拥有REPLICATION权限(即角色能启动复制), 完整的描述见文档CREATE ROLE。
该新用户将没有REPLICATION权限(即角色不能启动复制), 完整的描述见文档CREATE ROLE。
显示createuser命令的帮助信息,然后退出。
createuser还接受以下命令行选项用于连接参数:
指定运行服务端的主机名。如果数值以斜杠开头则被用作到Unix域套接字的路径。
指定服务端侦听的TCP端口或一个本地Unix域套接字文件的扩展(描述符)。
进行联接的用户名(不是要创建的用户名)。
永远不提示输入密码。 如果服务器要求密码验证和密码 (并且)通过其他方式如 .pgpass文件(验证)不可用, 则联接尝试将失败。 此选项在不需要用户输入密码的批处理作业和脚本中非常有用。
强制createuser提示输入密码 (用于联接到服务端,而不是新用户的密码)。
这个选项不是必须的,如果服务器要求认证密码 createuser会自动提示需输入密码。 然而,createuser会浪费一个联接尝试判断出该服务器需要密码。 在某些情况下,这是值得键入-W以避免多余的联接尝试。
如果有问题,将会显示后端错误消息。参阅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选项。