createuser创建一个新的 PostgreSQL 用户(或者更准确地说,一个角色)。 只有超级用户和有 CREATEROLE 权限的用户可以创建新的用户。 因此,createuser 必须由某位可以以超级用户或者是有 CREATEROLE 权限的用户连接的用户执行。
如果你希望创建一个新的超级用户,你必须以超级用户身份连接, 而不仅仅是一个有 CREATEROLE 权限的。 成为超级用户就意味着在数据库里绕开所有访问权限检查的能力,因此,不要轻易赋予超级用户权限。
createuser 是 SQL 命令 CREATE ROLE 的封装。 因此,用哪种方法创建新用户都没什么特别的。
createuser 接受下列命令行参数:
声明要创建的 PostgreSQL 角色名称。 该名称必须在该 PostgreSQL 安装的所有角色中唯一。
新用户将是超级用户。
新用户将不是超级用户。这个是缺省。
允许该新建用户创建数据库。
禁止该新建用户创建数据库。这个是缺省。
新用户将被允许创建新角色(也就是说,这个用户将有 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 来赋予口令。