createuser — 定义一个新的PostgreSQL用户账户
createuser [connection-option...] [option...] [username]
createuser创建一个新的PostgreSQL用户(或者更准确些,是一个角色)。只有超级用户和具有CREATEROLE特权的用户才能创建新用户,因此createuser必须被以上两种用户调用。
如果您希望创建一个具有SUPERUSER、REPLICATION或BYPASSRLS特权的角色,
您必须以超级用户身份连接,而不仅仅是具有CREATEROLE特权。
成为超级用户意味着能够绕过数据库中的所有访问权限检查,因此超级用户访问权限不应轻易授予。
CREATEROLE 还赋予了非常广泛的特权。
createuser是SQL命令CREATE ROLE的一个包装器。在通过这个工具和其他方法访问服务器来创建用户之间没有实质性的区别。
createuser接受以下命令行参数:
username指定要创建的PostgreSQL用户的名称。 此名称必须与此PostgreSQL安装中的所有现有角色不同。
-c number--connection-limit=number为新用户设置最大连接数。默认情况下不设置限制。
-d--createdb新用户将被允许创建数据库。
-D--no-createdb新用户将不被允许创建数据库。这是默认设置。
-e--echo回显createuser生成并发送到服务器的命令。
-E--encrypted这个选项已经过时,但仍然被接受以保持向后兼容性。
-g role--role=role
指示将立即作为新成员添加到的角色。可以通过编写多个
-g开关来指定将其添加为成员的多个角色。
-i--inherit新角色将自动继承其成员角色的权限。 这是默认设置。
-I--no-inherit新角色不会自动继承其成员角色的权限。
--interactive
如果在命令行上没有指定用户名,则提示用户输入,并提示用户选择以下选项之一:-d/-D,
-r/-R,-s/-S,这些选项在命令行上没有指定。
(这是 PostgreSQL 9.1 版本之前的默认行为。)
-l--login新用户将被允许登录(也就是说,用户名可以作为初始会话用户标识符)。 这是默认设置。
-L--no-login新用户将不被允许登录。 (没有登录权限的角色仍然可以作为管理数据库权限的手段。)
-P--pwprompt如果提供了,createuser将提示输入新用户的密码。 如果您不打算使用密码验证,则这不是必需的。
-r--createrole
新用户将被允许创建、修改、删除、评论、更改安全标签,并授予或撤销其他角色的成员资格;也就是说,
该用户将拥有CREATEROLE特权。
有关此特权赋予了哪些能力的更多详细信息,请参见角色创建。
-R--no-createrole新用户将不被允许创建新角色。这是默认设置。
-s--superuser新用户将成为超级用户。
-S--no-superuser新用户将不会是超级用户。这是默认设置。
-V--version打印createuser版本并退出。
--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来避免额外的连接尝试。
PGHOSTPGPORTPGUSER默认连接参数
PG_COLOR
规定在诊断消息中是否使用颜色。可能的值为 always,
auto和never。
和大部分其他PostgreSQL工具相似,这个工具也使用libpq(见第 34.15 节)支持的环境变量。
在有困难时,可以在CREATE ROLE和psql中找潜在问题和错误消息的讨论。数据库服务器必须运行在目标主机上。同样,任何libpq前端库使用的默认连接设置和环境变量都将适用于此。
要在默认数据库服务器上创建一个用户joe:
$createuser joe
要在默认数据库服务器上创建一个用户joe并提示要求一些额外属性:
$createuser --interactive joeShall the new role be a superuser? (y/n)nShall the new role be allowed to create databases? (y/n)nShall 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 joeCREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
要创建用户joe为一个超级用户并且立刻分配一个口令:
$createuser -P -s -e joeEnter password for new role:xyzzyEnter it again:xyzzyCREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
在上面的例子中,在录入新口令时新口令并没有真正地被回显,但是为了清晰,我们特意把它列了出来。如你所见,该口令在被发送给客户端之前会被加密。