2024年9月26日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

createuser

createuser — 定义新的 PostgreSQL 用户账户

概要

createuser [连接选项...] [选项...] [用户名]

描述

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

如果您希望创建具有 SUPERUSERREPLICATIONBYPASSRLS 权限的角色,则必须以超级用户身份连接,而不仅仅是具有 CREATEROLE 权限。成为超级用户意味着能够绕过数据库中的所有访问权限检查,因此不应轻易授予超级用户访问权限。 CREATEROLE 也赋予了非常广泛的权限

createuser 是围绕以下内容的包装器:SQL命令 CREATE ROLE。通过此实用程序创建用户与通过其他访问服务器的方法创建用户之间没有实质区别。

选项

createuser 接受以下命令行参数

用户名

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

-a 角色
--with-admin=角色

指定一个现有的角色,该角色将自动作为新角色的成员添加,并具有管理员选项,使其有权将新角色的成员资格授予其他人。可以通过编写多个 -a 开关来指定多个现有角色。

-c 数字
--connection-limit=数字

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

-d
--createdb

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

-D
--no-createdb

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

-e
--echo

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

-E
--encrypted

此选项已过时,但出于向后兼容性考虑仍被接受。

-g 角色
--member-of=角色
--role=角色 (已弃用)

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

-i
--inherit

新角色将自动继承其所属角色的权限。这是默认设置。

-I
--no-inherit

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

--interactive

如果命令行上未指定用户名,则提示输入用户名,并且还提示输入命令行上未指定的 -d/-D-r/-R-s/-S 中的任何一个选项。(这是直到 PostgreSQL 9.1 之前的默认行为。)

-l
--login

新用户将被允许登录(即,用户名可以用作初始会话用户标识符)。这是默认设置。

-L
--no-login

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

-m 角色
--with-member=角色

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

-P
--pwprompt

如果给出,createuser 将发出提示以获取新用户的密码。如果您不打算使用密码身份验证,则无需执行此操作。

-r
--createrole

新用户将被允许创建、更改、删除、注释、更改其他角色的安全标签;也就是说,此用户将具有 CREATEROLE 权限。有关此权限赋予哪些功能的更多详细信息,请参阅角色创建

-R
--no-createrole

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

-s
--superuser

新用户将成为超级用户。

-S
--no-superuser

新用户将不是超级用户。这是默认设置。

-v 时间戳
--valid-until=时间戳

设置角色密码不再有效的时间和日期。默认设置是不设置密码过期日期。

-V
--version

打印 createuser 版本并退出。

--bypassrls

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

--no-bypassrls

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

--replication

新用户将具有 REPLICATION 权限,这在 CREATE ROLE 的文档中进行了更详细的描述。

--no-replication

新用户将不具有 REPLICATION 权限,这在 CREATE ROLE 的文档中进行了更详细的描述。这是默认设置。

-?
--help

显示有关 createuser 命令行参数的帮助,并退出。

createuser 还接受以下用于连接参数的命令行参数

-h 主机
--host=主机

指定服务器正在运行的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。

-p 端口
--port=端口

指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。

-U 用户名
--username=用户名

要连接的用户名称(不是要创建的用户名称)。

-w
--no-password

从不发出密码提示。如果服务器需要密码身份验证并且密码无法通过其他方式(例如 .pgpass 文件)获得,则连接尝试将失败。此选项在批处理作业和脚本中很有用,在这些作业和脚本中,没有用户在场输入密码。

-W
--password

强制 createuser 提示输入密码(用于连接到服务器,而不是用于新用户的密码)。

此选项绝不是必需的,因为如果服务器要求密码身份验证,createuser 将自动提示输入密码。但是,createuser 会浪费一次连接尝试来发现服务器需要密码。在某些情况下,值得键入 -W 以避免额外的连接尝试。

环境

PGHOST
PGPORT
PGUSER

默认连接参数

PG_COLOR

指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

此实用程序与大多数其他 PostgreSQL 实用程序一样,也使用 libpq 支持的环境变量(请参阅第 32.15 节)。

诊断

如果遇到困难,请参阅CREATE ROLEpsql,了解潜在问题和错误消息的讨论。数据库服务器必须在目标主机上运行。此外,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;

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

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或需要进一步说明,请使用此表单报告文档问题。