🗄️PostgreSQL 權限與角色管理筆記
本文整理 PostgreSQL 權限控制(Privileges)與角色管理(Roles)的核心概念與常見操作,包括角色新增/刪除、權限授予/回收,以及行級(Row-level)與列級(Column-level)安全控制。
🧩 基本概念
🔹 使用者與角色(Roles)
PostgreSQL 將「使用者」與「角色」統一成 Role 概念。每個角色可:
登入(
LOGIN)建立資料庫(
CREATEDB)建立其他角色(
CREATEROLE)擁有超級權限(
SUPERUSER)
-- 建立可登入的角色
CREATE ROLE dev_user LOGIN PASSWORD 'mypassword';
-- 建立管理者角色
CREATE ROLE admin LOGIN CREATEDB CREATEROLE;🔹 檢視現有角色
\du -- psql 指令,顯示所有角色與屬性🔹 刪除角色
⚠️ 若角色仍擁有資料表或其他物件,需先轉移所有權再刪除。
🔐 權限(Privileges)
PostgreSQL 權限可分為三層:
資料庫層級(Database-level)
資料表與檢視層級(Table/View-level)
欄位(Column-level)與行級安全(RLS)
🔸 常見權限種類
CONNECT
Database
允許連線到資料庫
CREATE
Schema, Database
可建立物件(table, view 等)
SELECT
Table, View
查詢資料
INSERT
Table
新增資料
UPDATE
Table, Column
修改資料(可限欄位)
DELETE
Table
刪除資料
USAGE
Schema, Sequence
使用 schema 或序列
EXECUTE
Function
執行函式
🔸 授予權限(GRANT)
🔸 回收權限(REVOKE)
🧱 欄位(Column-level)權限
你可以只允許使用者讀取或修改特定欄位。
🧬 行級安全(Row-Level Security, RLS)
PostgreSQL 支援行級安全策略,讓不同角色只能看到或操作特定的資料列。
啟用行級安全
建立行級策略(POLICY)
管理策略
🧰 權限綜合範例
假設我們有一個公司資料庫 company_db,要建立一位只能看自己部門員工的使用者:
✅ 現在
hr_user只會看到與自己部門相符的員工資料。
🧾 管理技巧
使用
ALTER ROLE修改角色屬性:使用
pg_roles或pg_user系統視圖查詢角色屬性:使用
\z(或\dp)檢查資料表的權限分佈。
📚 延伸閱讀
💡 建議:在開發或生產環境,將權限分層為 readonly、readwrite、admin 等角色模板,避免直接給最終使用者廣泛權限,以降低資料洩漏與誤操作風險。
Last updated