介紹如何在 PostgreSQL 資料庫中增加管理者帳號,或授予使用者資料庫管理權限。

建立使用者帳號

PostgreSQL 資料庫的管理者帳號實際上就是將普通帳號授予管理者權限,若要列出目前 PostgreSQL 資料庫中所有的使用者,可以執行:

-- 列出既有使用者
SELECT usename FROM pg_user;
usename
----------
 postgres
(1 row)

若要新增使用者,可以使用 CREATE USER 指令:

-- 建立新使用者 officeguide
CREATE USER officeguide;
CREATE ROLE

建立新的使用者之後,再次確認:

-- 列出既有使用者
SELECT usename FROM pg_user;
usename
-------------
 postgres
 officeguide
(2 rows)

查詢帳號權限

若需要查詢所有使用者帳號的權限,可以使用 \du 指令:

-- 查詢帳號權限
\du
List of roles
 Role name  |                         Attributes                         | Member of
------------+------------------------------------------------------------+-----------
 officegide |                                                            | {}
 postgres   | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

授予管理者權限

若要授予一般使用者帳號管理者權限,可以使用 ALTER USER 新增 SUPERUSER 權限:

-- 授予 officeguide 帳號管理者權限
ALTER USER officeguide WITH SUPERUSER;
ALTER ROLE

授予管理者權限之後,再次確認:

-- 查詢帳號權限
\du
List of roles
  Role name  |                         Attributes                         | Member of
-------------+------------------------------------------------------------+-----------
 officeguide | Superuser                                                  | {}
 postgres    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

撤銷帳號權限

若要撤銷指定使用者的管理者權限,可以使用 ALTER USER 配合 NOSUPERUSER

-- 撤銷 officeguide 帳號管理者權限
ALTER USER officeguide WITH NOSUPERUSER;
ALTER ROLE

撤銷管理者權限後,再次確認:

-- 查詢帳號權限
\du
List of roles
  Role name  |                         Attributes                         | Member of
-------------+------------------------------------------------------------+-----------
 officeguide |                                                            | {}
 postgres    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

刪除使用者帳號

若要刪除指定使用者帳號,可以使用 DROP USER 指令:

-- 刪除 officeguide 帳號
DROP USER officeguide;
DROP ROLE

參考資料