22.5. Default Roles
PostgreSQL 提供一組預先定義的角色,讓使用者能存取某些常見且需要特權的功能與資訊。系統管理員(包括擁有 CREATEROLE
權限的角色)可以使用 GRANT
指令,將這些角色授與使用者或其他角色,使他們能存取特定功能與資訊。
這些預設角色列於 表格 22.1。請注意,這些角色的具體權限可能隨著功能新增而有所變動,建議系統管理員定期查看版本更新說明。
表格 22.1. 預設角色(Predefined Roles)
pg_read_all_data
可讀取所有資料(資料表、檢視表、序列),相當於對這些物件擁有 SELECT
權限,並對所有 schema 擁有 USAGE
權限,即使沒有明確授與也可使用。此角色未設置 BYPASSRLS
屬性。如果使用了 RLS(行級安全性),系統管理員可能需要在被授與此角色的其他角色上設定 BYPASSRLS
。
pg_write_all_data
可寫入所有資料(資料表、檢視表、序列),相當於對這些物件擁有 INSERT
、UPDATE
、DELETE
權限,並對所有 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_settings
、pg_read_all_stats
和 pg_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_monitor
、pg_read_all_settings
、pg_read_all_stats
與 pg_stat_scan_tables
等角色旨在讓系統管理員方便地配置角色,以用於資料庫伺服器的監控。這些角色授與了一組常見的權限,使角色可讀取通常僅限超級使用者可見的設定、統計與其他系統資訊。
pg_database_owner
角色有一個隱含且情境依賴的成員,也就是目前資料庫的擁有者。該角色本身起初不擁有任何權限。與其他角色一樣,它可以擁有物件或被授與存取權限。因此,一旦 pg_database_owner
在範本資料庫中擁有權限,從該範本建立的每個資料庫的擁有者都會繼承那些權限。pg_database_owner
不能成為其他角色的成員,也不能擁有非隱含成員。
pg_signal_backend
角色旨在讓系統管理員授與受信任但非超級使用者的角色權限,以發送訊號至其他後端。此角色目前允許取消其他後端的查詢或終止其工作階段。不過,被授與此角色的使用者無法對由超級使用者所擁有的後端發送訊號。詳見 第 9.27.2 節。
pg_read_server_files
、pg_write_server_files
及 pg_execute_server_program
等角色旨在讓系統管理員授與受信任但非超級使用者的角色能以資料庫執行身分存取檔案或執行伺服器端程式。由於這些角色能直接存取伺服器上的任意檔案,它們會繞過所有資料庫層級的權限檢查,也可能被濫用以取得超級使用者等級的存取權,因此授與這些角色時應格外謹慎。
在授與這些角色時應特別留意,僅在真正需要的情況下使用,並充分了解這些角色提供的是特權等級的資訊存取權限。
系統管理員可以使用 GRANT
指令將這些角色授與給使用者,例如:
GRANT pg_signal_backend TO admin_user;
Last updated
Was this helpful?