關於 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 使用者

身分與存取權管理 (IAM) 已在名為 IAM 驗證 的功能中與 Cloud SQL 整合。使用這項功能建立執行個體後,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 資料表。不過,在某些情況下,存取角色名稱和經過雜湊處理的密碼會很實用,例如:

  • 設定代理程式或負載平衡,並使用現有的使用者和密碼
  • 不變更密碼即可遷移使用者
  • 實作密碼政策管理的自訂解決方案

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 存在,則該資料表具有 SELECTpg_authid 資料表的存取權。

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

請確認已設定的角色存在,且 cloudsql.pg_shadow_select_rolecloudsql.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 說明文件中,請參閱以下項目:

後續步驟