createuser — 定义一个新的PostgreSQL用户账户
createuser
[connection-option
...] [option
...] [username
]
createuser创建一个新的PostgreSQL用户(或者更准确些,是一个角色)。只有超级用户和具有CREATEROLE
特权的用户才能创建新用户,因此createuser必须被以上两种用户调用。
如果你希望创建一个新的超级用户,你必须作为一个超级用户连接,而不仅仅是具有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
来避免额外的连接尝试。
在有困难时,可以在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;
在上面的例子中,在录入新口令时新口令并没有真正地被回显,但是为了清晰,我们特意把它列了出来。如你所见,该口令在被发送给客户端之前会被加密。如果使用了选项--unencrypted
,口令将会出现在回显的命令中(并且还可能出现在服务器日志和其他地方)。因此如果任何他人能够看到你的屏幕,你不会希望使用-e
。