PostgreSQL 提供了一組預定義的角色,這些角色提供對某些常用的特權功能和資訊的存取權限。管理員(包括具有 CREATEROLE
權限的角色)可以將這些角色 GRANT
授予他們環境中的使用者和/或其他角色,從而使這些使用者可以存取指定的功能和資訊。
預定義的角色在 表 21.1 中描述。請注意,隨著新增額外的功能,每個角色的特定權限將來可能會更改。管理員應監控版本說明以了解更改。
表 21.1. 預定義角色
角色 | 允許的存取 |
---|---|
pg_read_all_data | 讀取所有資料(表格、檢視表、序列),如同對這些物件擁有 SELECT 權限,以及對所有綱要擁有 USAGE 權限,即使沒有明確擁有這些權限。此角色未設定角色屬性 BYPASSRLS 。如果正在使用 RLS,管理員可能希望對授予此角色的角色設定 BYPASSRLS 。 |
pg_write_all_data | 寫入所有資料(表格、檢視表、序列),如同對這些物件擁有 INSERT 、UPDATE 和 DELETE 權限,以及對所有綱要擁有 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_checkpoint | 允許執行 CHECKPOINT 命令。 |
pg_maintain | 允許在所有關聯上執行 VACUUM 、ANALYZE 、CLUSTER 、REFRESH MATERIALIZED VIEW 、REINDEX 和 LOCK TABLE ,如同對這些物件擁有 MAINTAIN 權限,即使沒有明確擁有這些權限。 |
pg_use_reserved_connections | 允許使用透過 reserved_connections 保留的連線槽。 |
pg_create_subscription | 允許對資料庫具有 CREATE 權限的使用者發出 CREATE SUBSCRIPTION 。 |
pg_monitor
、pg_read_all_settings
、pg_read_all_stats
和 pg_stat_scan_tables
角色旨在讓管理員可以輕鬆設定一個角色,以便監控資料庫伺服器。它們授予一組常見的權限,允許該角色讀取各種有用的組態設定、統計資料和其他通常僅限於超級使用者的系統資訊。
pg_database_owner
角色具有一個隱含的、取決於情況的成員,即目前資料庫的擁有者。與任何角色一樣,它可以擁有物件或接收存取權限的授與。因此,一旦 pg_database_owner
在範本資料庫中擁有權限,每個從該範本具現化的資料庫的擁有者都將行使這些權限。pg_database_owner
不能是任何角色的成員,也不能擁有非隱含的成員。最初,此角色擁有 public
綱要,因此每個資料庫擁有者都管理綱域的本機使用。
pg_signal_backend
角色旨在讓管理員可以讓受信任但非超級使用者的角色,向其他後端傳送訊號。目前,此角色啟用傳送訊號以取消另一個後端上的查詢或終止其連線。但是,被授予此角色的使用者無法向超級使用者擁有的後端傳送訊號。請參閱 第 9.28.2 節。
pg_read_server_files
、pg_write_server_files
和 pg_execute_server_program
角色旨在讓管理員可以擁有受信任但非超級使用者的角色,這些角色能夠以執行資料庫的使用者身分存取檔案並在資料庫伺服器上執行程式。由於這些角色能夠存取伺服器檔案系統上的任何檔案,因此它們在直接存取檔案時會繞過所有資料庫層級的權限檢查,並且可以用於取得超級使用者層級的存取權限,因此在將這些角色授予使用者時應格外小心。
在授予這些角色時應小心謹慎,以確保它們僅在需要的地方使用,並且了解這些角色授予對特權資訊的存取權限。
管理員可以使用 GRANT
指令授與使用者這些角色的存取權,例如:
GRANT pg_signal_backend TO admin_user;
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用此表單來回報文件問題。