PostgreSQL 的使用者權限管理和 MySQL 差很多,花了好一陣子才搞懂。
一開始操作都必須使用 postgres 的使用者身份來操作,所以都會需要 sudo:
# 建立預備要給予 admin 權限的帳號 # 如果不想要 sudo 則設定成 Linux 相同帳號名稱 sudo -u postgres createuser zeroplex
再來是要幫上面新增的使用者設定 role,這邊需要進入 PostgreSQL 的 console 中下指令:
sudo -u postgres psql
psql (14.2)
Type "help" for help.
-- 透過 \du 來列出現有的使用者與角色
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+------------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
zeroplex | | {}
從上表的內容,可以看出剛剛新增的帳號什麼權限都沒有,但是預設帳號 postgres 擁有 Superuser 的權限。
若要建立的帳號擁有 admin 權限 (在 PostgreSQL 中叫做 superuser),則須透過 alter user 來授予權限:
postgres=# alter user zeroplex with superuser;
ALTER ROLE
-- 再次列出使用者與其角色 (role)
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+------------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
zeroplex | Superuser | {}
除了 superuser 以外,還有其他不同權限的角色可以指派,請參考 PostgreSQL alter user 的說明。
接著就可以不用 sudo 直接下 PostgreSQL 管理相關指令:
$ createdb test
注意:使用者如果擁有 superuser 權限以後,下管理相關指令是不需要 sudo 的,因此必須承擔意外造成的風險。個人建議還是切換成 sudo -u postgres 以後在進行操作比較保險。
錯字:
s/以後在進行/以後再進行/