關於 PostgreSQL 使用者和角色

本頁面說明 Cloud SQL 如何與 PostgreSQL 使用者和角色搭配使用。PostgreSQL 角色可讓您控管使用者存取 PostgreSQL 執行個體時,能夠擁有的存取權與功能。

如需完整的 PostgreSQL 角色說明文件,請參閱 PostgreSQL 說明文件中的「資料庫角色」。如要瞭解如何建立及管理 Cloud SQL 使用者,請參閱「建立及管理使用者」。

使用者和角色之間的差異

PostgreSQL 角色可以是單一角色,也可以是角色群組。使用者是可登入的角色 (該角色具有 LOGIN 屬性)。由於 Cloud SQL 建立的所有角色都具有 LOGIN 屬性,因此 Cloud SQL 會交替使用「角色」和「使用者」這兩個詞彙。不過,如果您使用 psql 用戶端建立角色,該角色不一定會具備 LOGIN 屬性。

所有 PostgreSQL 使用者都必須有密碼。您無法使用沒有密碼的使用者登入。

超級使用者限制和權限

PostgreSQL 適用的 Cloud SQL 是一項代管服務,因此會限制需要進階權限的特定系統程序和資料表存取權。在 Cloud SQL 中,客戶無法建立或存取具備超級使用者屬性的使用者。

您無法建立具有超級使用者權限的資料庫使用者。不過,您可以建立具有 cloudsqlsuperuser 角色的資料庫使用者,這類使用者具備部分超級使用者權限,包括:

  • 建立需要超級使用者權限的擴充功能。
  • 建立事件觸發條件。
  • 建立複製使用者。
  • 建立複製發布作業和訂閱項目。
  • 以具備 cloudsqlsuperuser 角色的資料庫使用者身分執行 CREATE CASTDROP CAST 陳述式。不過,此使用者必須同時擁有來源和目標資料類型的 USAGE 權限。舉例來說,使用者可以建立轉換,將來源 int 資料類型轉換為目標 boolean 資料類型。

  • 具備 pg_largeobject 目錄資料表的完整存取權。

預設 PostgreSQL 使用者

建立新的 PostgreSQL 適用的 Cloud SQL 執行個體時,系統會建立預設管理員使用者 postgres,但不會建立密碼。您必須先為這位使用者設定密碼,才能登入。您可以在 Google Cloud 控制台中執行這項操作,也可以使用下列 gcloud 指令:

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

postgres 使用者屬於 cloudsqlsuperuser 角色,並具有下列屬性 (權限):CREATEROLECREATEDBLOGIN。不含 SUPERUSERREPLICATION 屬性。

系統會建立預設 cloudsqlimportexport 使用者,並授予 CSV 匯入/匯出作業所需的最低權限。您可以建立自己的使用者來執行這些作業,但如果您不這麼做,系統會使用預設的 cloudsqlimportexport 使用者。cloudsqlimportexport 是系統使用者,客戶無法直接使用。

用於 IAM 驗證的 Cloud SQL IAM 使用者

Identity and Access Management (IAM) 與 Cloud SQL 整合,提供 IAM 驗證功能。使用這項功能建立執行個體時,IAM 使用者可以透過 IAM 使用者名稱和密碼登入執行個體。使用 IAM 驗證的優點是,授予使用者資料庫存取權時,可以沿用現有的 IAM 憑證。使用者離開機構時,系統會停權其 IAM 帳戶,並自動移除存取權。

其他 PostgreSQL 使用者

您可以建立其他的 PostgreSQL 使用者或角色。使用 Cloud SQL 建立的所有使用者都屬於 cloudsqlsuperuser 角色的一部分,且具有與 postgres 使用者相同的一組屬性:CREATEROLECREATEDBLOGIN。您可以使用 ALTER ROLE 指令變更任何使用者的屬性。

如果您使用 psql 用戶端建立新使用者,可以選擇將其與不同角色建立關聯,或賦予不同屬性。

存取 pg_shadow 檢視畫面和 pg_authid 資料表

您可以使用 pg_shadow 檢視畫面,處理在 pg_authid 目錄表格中標示為 rolcanlogin 的角色屬性。

pg_shadow 檢視畫面包含雜湊密碼,以及允許登入叢集的角色 (使用者) 的其他屬性。pg_authid 目錄表包含所有資料庫角色的雜湊密碼和其他屬性。

在 Cloud SQL 中,客戶無法使用預設權限存取 pg_shadow 檢視區塊或 pg_authid 資料表。不過,在某些情況下,存取角色名稱和雜湊密碼會很有用,包括:

  • 使用現有使用者和密碼設定 Proxy 或負載平衡
  • 遷移使用者,但不變更密碼
  • 實作密碼政策管理自訂解決方案

設定 pg_shadow 檢視畫面和 pg_authid 資料表的旗標

如要存取 pg_shadow 檢視畫面,請將 cloudsql.pg_shadow_select_role 旗標設為 PostgreSQL 角色名稱。如要存取 pg_authid 資料表,請將 cloudsql.pg_authid_select_role 旗標設為 PostgreSQL 角色名稱。

如果 cloudsql.pg_shadow_select_role 存在,則具有 pg_shadow 檢視畫面的唯讀 (SELECT) 存取權。如果 cloudsql.pg_authid_select_role 存在,則 SELECT 有權存取 pg_authid 資料表。

如果任一角色不存在,設定就不會生效,但不會發生錯誤。 不過,使用者嘗試存取檢視區塊或表格時,系統會記錄錯誤。 PostgreSQL 資料庫記錄中會記錄這項錯誤:cloudsql.googleapis.com/postgres.log。 如要瞭解如何查看這份記錄,請參閱「查看執行個體記錄」。

確認已設定的角色存在,且 cloudsql.pg_shadow_select_role 旗標或 cloudsql.pg_authid_select_role 旗標的值沒有錯別字。您也可以使用 pg_has_role 函式,確認使用者是否為這些角色的成員。如要瞭解這項函式,請參閱「系統資訊函式和運算子」頁面。

您可以使用 cloudsql.pg_shadow_select_role 標記或 cloudsql.pg_authid_select_role 標記搭配 PostgreSQL 角色成員資格,管理多位使用者的 pg_shadowpg_authid 存取權。

變更任一標記都不需要重新啟動資料庫。

如要進一步瞭解支援的標記,請參閱「設定資料庫標記」。

選擇密碼儲存格式

PostgreSQL 適用的 Cloud SQL 會以雜湊格式儲存使用者密碼。您可以使用 password_encryption 旗標將加密演算法設為 md5scram-sha-256md5 演算法的相容性最廣,而 scram-sha-256 演算法的安全性較高,但可能與舊版用戶端不相容。

啟用 pg_shadow 存取權,從 Cloud SQL 執行個體匯出角色屬性時,請考慮使用用戶端支援的最安全演算法。

在 PostgreSQL 說明文件中,另請參閱:

後續步驟