# 22.5. Default Roles

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

這些預設角色列於 [表格 22.1](https://www.postgresql.org/docs/14/predefined-roles.html#PREDEFINED-ROLES-TABLE)。請注意，這些角色的具體權限可能隨著功能新增而有所變動，建議系統管理員定期查看版本更新說明。

**表格 22.1. 預設角色（Predefined Roles）**

| 角色（Role）                     | 允許的存取權限（Allowed Access）                                                                                                                                                   |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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 節](https://www.postgresql.org/docs/14/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL)。

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

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

系統管理員可以使用 [`GRANT`](https://www.postgresql.org/docs/14/sql-grant.html) 指令將這些角色授與給使用者，例如：

```
GRANT pg_signal_backend TO admin_user;
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.postgresql.tw/server-administration/database-roles/default-roles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
