PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

createuser

createuser — 定义一个新的 PostgreSQL 用户账户

Synopsis

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

描述

createuser 创建一个新的 PostgreSQL 用户(或者更准确地说,一个角色)。只有超级用户和拥有 CREATEROLE 特权的用户才能创建新用户,因此 createuser 必须由能够以超级用户或拥有 CREATEROLE 特权的用户身份连接的人来调用。

如果想创建一个拥有 SUPERUSER、REPLICATION 或 BYPASSRLS 特权的角色,你必须以超级用户身份连接,而不能仅凭 CREATEROLE 特权。成为超级用户意味着能够绕过数据库内所有的访问权限检查,因此不应轻易授予超级用户身份。CREATEROLE 同样传达了 非常广泛的特权。

createuser 是 SQL 命令 CREATE ROLE 的一个包装程序。通过此工具创建用户与通过其他方法访问服务器创建用户没有实质区别。

选项

createuser 接受下列命令行参数:

username

指定要创建的 PostgreSQL 用户的名称。该名称必须与这个 PostgreSQL 安装中所有现有的角色都不同。

-a role
--with-admin=role

指定一个现有的角色,该角色将自动被添加为新角色的成员并带有管理员选项(admin option),从而赋予它向其他人授予新角色成员身份的权利。可以通过书写多个 -a 开关来指定多个现有角色。

-c number
--connection-limit=number

为新用户设置最大连接数。默认是不设置限制。

-d
--createdb

新用户将被允许创建数据库。

-D
--no-createdb

新用户将不被允许创建数据库。这是默认值。

-e
--echo

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

-E
--encrypted

此选项已过时,但为了向后兼容仍被接受。

-g role
--member-of=role
--role=role (deprecated)

指定新角色应被自动添加为指定现有角色的成员。可以通过书写多个 -g 开关来指定多个现有角色。

-i
--inherit

新角色将自动继承其所属角色的特权。这是默认值。

-I
--no-inherit

新角色将不会自动继承其所属角色的特权。

--interactive

如果命令行上未指定用户名,则提示输入用户名,并且对于命令行上未指定的选项 -d/-D、-r/-R、-s/-S 中的每一对,也会提示进行选择。(在 PostgreSQL 9.1 及之前的版本中,这是默认行为。)

-l
--login

新用户将被允许登录(也就是说,该用户名可以用作初始会话用户标识符)。这是默认值。

-L
--no-login

新用户将不被允许登录。(没有登录特权的角色作为管理数据库权限的一种手段仍然有用。)

-m role
--with-member=role

指定一个现有的角色,该角色将自动被添加为新角色的成员。可以通过书写多个 -m 开关来指定多个现有角色。

-P
--pwprompt

如果给出此选项,createuser 将提示输入新用户的密码。如果不打算使用密码认证,则无需这样做。

-r
--createrole

新用户将被允许创建、修改和删除其他角色,对其他角色进行注释以及更改其安全标签;也就是说,该用户将拥有 CREATEROLE 特权。有关此特权赋予哪些能力的更多细节,参见 创建角色特权(CREATEROLE)。

-R
--no-createrole

新用户将不被允许创建新角色。这是默认值。

-s
--superuser

新用户将成为超级用户。

-S
--no-superuser

新用户将不会成为超级用户。这是默认值。

-v timestamp
--valid-until=timestamp

设置一个日期和时间,在此之后该角色的密码将不再有效。默认是不设置密码过期日期。

-V
--version

打印 createuser 的版本并退出。

--bypassrls

新用户将绕过所有行级安全(RLS)策略。

--no-bypassrls

新用户将不会绕过行级安全(RLS)策略。这是默认值。

--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

默认连接参数

PG_COLOR

指定是否在诊断消息中使用颜色。可能的值是 always、auto 和 never。

与大多数其他 PostgreSQL 工具一样,此工具也使用 libpq 支持的环境变量(参见 Section 32.15)。

诊断

如果遇到问题,请参见 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 'SCRAM-SHA-256$4096:44560wPMLfjqiAzyPDZ/eQ==$4CA054rZlSFEq8Z3FEhToBTa2X6KnWFxFkPwIbKoDe0=:L/nbSZRCjp6RhOhKK56GoR1zibCCSePKshCJ9lnl3yw=' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS;

在上面的示例中,新密码在键入时实际上并不会回显,但为了清晰起见我们展示了键入的内容。如你所见,密码在发送到客户端之前已被加密。

另请参阅

dropuser, CREATE ROLE, createrole_self_grant