22.5. Default Roles

PostgreSQL 提供一組預先定義的角色,讓使用者能存取某些常見且需要特權的功能與資訊。系統管理員(包括擁有 CREATEROLE 權限的角色)可以使用 GRANT 指令,將這些角色授與使用者或其他角色,使他們能存取特定功能與資訊。

這些預設角色列於 表格 22.1。請注意,這些角色的具體權限可能隨著功能新增而有所變動,建議系統管理員定期查看版本更新說明。

表格 22.1. 預設角色(Predefined Roles)

角色(Role)
允許的存取權限(Allowed Access)

pg_read_all_data

可讀取所有資料(資料表、檢視表、序列),相當於對這些物件擁有 SELECT 權限,並對所有 schema 擁有 USAGE 權限,即使沒有明確授與也可使用。此角色未設置 BYPASSRLS 屬性。如果使用了 RLS(行級安全性),系統管理員可能需要在被授與此角色的其他角色上設定 BYPASSRLS

pg_write_all_data

可寫入所有資料(資料表、檢視表、序列),相當於對這些物件擁有 INSERTUPDATEDELETE 權限,並對所有 schema 擁有 USAGE 權限,即使沒有明確授與也可使用。此角色未設置 BYPASSRLS 屬性。如果使用了 RLS,系統管理員可能需要在被授與此角色的其他角色上設定 BYPASSRLS

pg_read_all_settings

可讀取所有組態變數,即使是通常僅超級使用者能見的變數。

pg_read_all_stats

可讀取所有 pg_stat_* 檢視表,並使用各種統計相關的擴充功能,即使這些通常僅限超級使用者可見。

pg_stat_scan_tables

可執行會對資料表施加 ACCESS SHARE 鎖定的監控函數,且可能持續一段較長的時間。

pg_monitor

可讀取/執行各種監控檢視表與函數。此角色本身是 pg_read_all_settingspg_read_all_statspg_stat_scan_tables 的成員。

pg_database_owner

無明確權限。成員隱含為目前資料庫的擁有者。

pg_signal_backend

可向其他後端程序發送訊號,取消查詢或終止其工作階段。

pg_read_server_files

可使用 COPY 及其他檔案存取函數,從資料庫伺服器上資料庫可存取的任意位置讀取檔案。

pg_write_server_files

可使用 COPY 及其他檔案存取函數,將資料寫入資料庫伺服器上資料庫可存取的任意位置。

pg_execute_server_program

可在資料庫伺服器上以資料庫執行用戶身分執行程式,使用 COPY 或其他允許執行伺服器端程式的函數。

pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables 等角色旨在讓系統管理員方便地配置角色,以用於資料庫伺服器的監控。這些角色授與了一組常見的權限,使角色可讀取通常僅限超級使用者可見的設定、統計與其他系統資訊。

pg_database_owner 角色有一個隱含且情境依賴的成員,也就是目前資料庫的擁有者。該角色本身起初不擁有任何權限。與其他角色一樣,它可以擁有物件或被授與存取權限。因此,一旦 pg_database_owner 在範本資料庫中擁有權限,從該範本建立的每個資料庫的擁有者都會繼承那些權限。pg_database_owner 不能成為其他角色的成員,也不能擁有非隱含成員。

pg_signal_backend 角色旨在讓系統管理員授與受信任但非超級使用者的角色權限,以發送訊號至其他後端。此角色目前允許取消其他後端的查詢或終止其工作階段。不過,被授與此角色的使用者無法對由超級使用者所擁有的後端發送訊號。詳見 第 9.27.2 節

pg_read_server_filespg_write_server_filespg_execute_server_program 等角色旨在讓系統管理員授與受信任但非超級使用者的角色能以資料庫執行身分存取檔案或執行伺服器端程式。由於這些角色能直接存取伺服器上的任意檔案,它們會繞過所有資料庫層級的權限檢查,也可能被濫用以取得超級使用者等級的存取權,因此授與這些角色時應格外謹慎。

在授與這些角色時應特別留意,僅在真正需要的情況下使用,並充分了解這些角色提供的是特權等級的資訊存取權限。

系統管理員可以使用 GRANT 指令將這些角色授與給使用者,例如:

GRANT pg_signal_backend TO admin_user;

Last updated

Was this helpful?