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/以後在進行/以後再進行/