createuser — 定义一个新的 PostgreSQL 用户账户
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
指定一个现有的角色,该角色将自动作为具有管理员选项的新角色的成员添加,使其有权授予其他人新角色的成员资格。可以通过编写多个 -a
开关来指定多个现有角色。
-c number
--connection-limit=number
为新用户设置最大连接数。默认设置为无限制。
-d
--createdb
允许新用户创建数据库。
-D
--no-createdb
不允许新用户创建数据库。这是默认设置。
-e
--echo
回显 createuser 生成并发送到服务器的命令。
-E
--encrypted
此选项已过时,但仍为向后兼容性接受。
-g role
--member-of=role
--role=role
(已弃用)指定应将新角色自动添加为指定的现有角色的成员。可以通过编写多个 -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
权限。有关此权限赋予的功能的更多详细信息,请参阅角色创建。
-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 支持的环境变量(请参阅 第 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 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
在上面的例子中,新密码在输入时实际上并没有回显,但是为了清楚起见,我们展示了输入的内容。正如你所看到的,密码在发送到客户端之前已经被加密。
如果您在文档中发现任何不正确的内容,与您使用特定功能的经验不符,或需要进一步澄清,请使用此表单报告文档问题。