PostgreSQL中修改用户权限的范围可以从简单到极其复杂,具体取决于实际需要的许可粒度。 

但是,在大多数情况下,强大的ALTER USER命令应该用于执行从允许用户登录,创建数据库,管理角色甚至成为 SUPERUSER 帐户的所有操作。

我们将简要探讨ALTER USER命令的强大功能,以便您可以根据需要轻松执行各种权限分配和删除。


创建新用户

在我们改变用户权限之前,我们应该建立一个新的用户帐户(通常称为ROLE)。
首先,我们将列出所有现有用户:

=# SELECT usename FROM pg_user;
 usename
----------
 postgres
(1 row)
默认情况下,postgres通常是唯一存在的用户,因此我们要创建一个新的encore用户来管理我们的数据库。 这可以使用CREATE USER命令完成:
=# CREATE USER encore;
CREATE ROLE
=# SELECT usename FROM pg_user;
  usename
-----------
 postgres
 encore
(2 rows)

完成创建用户后,查看现有用户权限

检查分配给系统中用户的现有权限通常很有用。 这可以通过psql提示符中的 \du 命令轻松完成:

=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 encore     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
我们可以清楚地看到,即使我们现在添加了一个新用户,我们也必须为其分配一些权限,否则该用户还无法使用。

接下来,更改现有用户权限

我们可以开始使用 ALTER USER 来修改授予 encore 用户的权限。 

ALTER USER的基本格式包括用户名(或ROLE),后跟一系列选项,以告知PostgreSQL允许的更改:

=# ALTER USER role_specification WITH OPTION1 OPTION2 OPTION3;

这些选项包括CREATEDBCREATEROLECREATEUSER,甚至SUPERUSER。 此外,大多数选项也有负面的对应物,通知系统您希望拒绝用户该特定权限。 这些选项名称与其赋值对应名称相同,但前缀为NO(例如NOCREATEDBNOCREATEROLENOSUPERUSER)。

给用户 encore 分配 SUPERUSER 的许可

现在我们了解了创建用户和使用ALTER USER修改权限的基础知识,我们可以非常简单地使用SUPERUSER选项来分配我们的库管理员用户SUPERUSER权限:

=# ALTER USER encore WITH SUPERUSER;

ALTER ROLE
果然,如果我们现在显示我们的许可列表,我们会看到 encore 管理员拥有我们想要的 SUPERUSER 权限:
=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 encore     | Superuser                                      | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

撤销 SUPERUSER 的许可

如果我们犯了错误并分配了我们以后希望撤销的权限,只需发出相同的ALTER USER命令,但在要撤销的许可选项前添加NO前缀。
例如,我们可以从 encore 用户中删除 SUPERUSER,如下所示:

=# ALTER USER encore WITH NOSUPERUSER;
ALTER ROLE
=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 encore    |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
结束,以上就是如何给一个用户添加或者删除 SUPERUSER 权限的方式.