createuser 创建一个新的 PostgreSQL 用户(更准确地说是一个角色)。只有超级用户和有 CREATEROLE 权限的用户可以创建新的用户。因此,createuser 必须由超级用户或者是有 CREATEROLE 权限的用户执行。
如果你希望创建一个新的超级用户,你必须以超级用户身份连接,而不仅仅是一个有 CREATEROLE 权限的用户。成为超级用户就意味着将在数据库里绕开所有访问权限检查,因此,不要轻易赋予超级用户权限。
createuser 是 SQL 命令 CREATE ROLE 的封装。因此,这两种方法创建的新用户没什么差别。
createuser 接受下列命令行参数:
要创建的 PostgreSQL 角色名称。该名称必须在该 PostgreSQL 安装的所有角色中唯一。
表明新用户将是超级用户
新用户将不是超级用户。这个是缺省。
允许该新建用户创建数据库
禁止该新建用户创建数据库。这个是缺省。
T新用户将被允许创建新角色,也就是说,这个用户将有 CREATEROLE 权限。
新用户将不允许创建新角色。这个是缺省。
新用户将允许登录,也就是说,用户名可以用作初始会话的用户标识。这个是缺省。
新用户将不允许登录。一个不能登录的角色仍然是很有用的,比如用于权限管理。
新角色将自动继承其所属角色组的权限。这个是缺省。
新角色将不会自动继承他所属角色组的权限。
为新用户设置最大数目的连接数。缺省为无限制。
如果给出,createuser 将发出一个提示符要求输入新用户的口令。如果你不打算用口令认证,那么这是不必要的。
对用户存储在数据库里的口令进行加密。如果没有声明,使用缺省的口令行为。
不要加密用户存储在数据库里的口令。如果没有声明,使用缺省的口令行为。
回显 createuser 生成并发送到服务器的命令。
不显示服务器应答(安静模式)
如果没有在命令行上声明必须的信息,程序会提示你输入。
createuser 还接受下列命令行参数作为连接参数:
指定运行服务器的主机名。如果数值以斜杠开头,则被用作到 Unix 域套接字的路径。
指定服务器正在侦听的 TCP 端口或本地 Unix 域套接字文件的扩展(描述符)
连接的用户名(不是要创建的用户名)
强制口令提示(与服务器连接的口令而不是新用户的口令)
如果出现问题,将会显示后端错误信息。参阅 CREATE ROLE 和 psql 获取可用信息的描述。数据库服务器必须在目标主机上运行。同样,任何 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 CREATE USER
用在主机 eden 上的服务器里创建 joe 用户,端口是 5000 ,避免提示并且回显执行的命令:
$ createuser -h eden -p 5000 -S -D -R -e joe CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN; CREATE ROLE
把用户 joe 创建为超级用户,并且立即赋予口令:
$ createuser -P -s -e joe Enter password for new role: xyzzy Enter it again: xyzzy CREATE ROLE joe PASSWORD 'xyzzy' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; CREATE ROLE
在上面例子中,虽然新口令在输入的时候实际上并不会实际显示出来,但是我们还是明确的把它显示出来了。然而口令会在回显的命令里显示出来,正如上面显示的那样,因此在指定口令的时候,我们反对你在别人可以看见你的屏幕的情况下使用 -e 选项。