Postgresql 中文操作指南

createuser

createuser — 定义新的 PostgreSQL 用户帐户

Synopsis

createuser [ connection-option …​] [ option …​] [ username ]

Description

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

如果希望创建具有 SUPERUSERREPLICATIONBYPASSRLS 权限的角色,则必须连接为超级用户,而不仅仅是具有 CREATEROLE 权限。成为超级用户意味着能够绕过数据库中的所有访问权限检查,因此不应轻易授予超级用户权限。 CREATEROLE 也传达 very extensive privileges

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

Options

createuser 接受以下命令行参数:

  • username

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

  • -a _role—​with-admin=_role

    • 指定将自动添加为具有 admin 选项的新角色成员的现有角色,使其具有向他人授予新角色成员资格的权利。可以指定多个现有角色,通过编写多个 -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 权限。有关此权限赋予哪些功能的更多详细信息,请参见 role creation

  • -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 以避免额外的连接尝试。

Environment

  • PGHOST_PGPORT_PGUSER

    • Default connection parameters

  • PG_COLOR

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

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

Diagnostics

遇到困难时,请参阅 CREATE ROLEpsql 了解潜在问题和错误消息的讨论。数据库服务器必须在目标主机上运行。此外,libpq 前端库使用的任何默认连接设置和环境变量都将适用。

Examples

要在默认数据库服务器上创建用户 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;

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