參數化安全檢視區塊總覽

選取說明文件版本:

本頁面說明 AlloyDB Omni 中的參數化安全檢視區塊,這類檢視區塊會使用 SQL 檢視區塊提供應用程式資料安全性和資料列存取控管,確保應用程式使用者只能查看自己有權存取的資料。

參數化安全檢視是 PostgreSQL 安全檢視的擴充功能,可讓您在檢視定義中使用應用程式專屬的具名檢視參數。這項功能提供介面,可接受查詢和具名參數的值。介面會使用這些值執行查詢,並在整個查詢執行過程中採用這些值。

以下是參數化安全檢視區塊的範例:

CREATE VIEW secure_checked_items WITH (security_barrier) AS
       SELECT bag_id, timestamp, location
       FROM checked_items t
       WHERE customer_id = $@app_end_userid;

您可以使用 execute_parameterized_query 預存程序查詢參數化安全檢視區塊,也可以執行 EXECUTE .. WITH VIEW PARAMETERS 陳述式。詳情請參閱「使用 AlloyDB Omni 參數化安全檢視畫面管理應用程式資料安全性」。

參數化安全檢視區塊的優點

參數化安全檢視畫面非常適合在資料庫層級管理資料安全,特別是處理來自不受信任來源的臨時查詢時,例如從自然語言翻譯的查詢。這些檢視畫面提供彈性的方式,可實作精細的存取權控管機制。

舉例來說,假設某個應用程式會追蹤顧客的託運行李。使用者 ID 為 12345 的顧客詢問「我的行李在哪裡?」在這種情況下,參數化安全檢視畫面可確保下列事項:

查詢只會傳回提交查詢的使用者可存取的資料列,例如與使用者 ID 12345 連結的資料列。

降低安全風險

當使用者在資料庫中執行不受信任的查詢 (例如自然語言查詢) 時,參數化安全檢視區塊有助於降低安全風險。這些風險包括:

  • 惡意提示:使用者可能會嘗試操控基礎模型,藉此存取所有應用程式資料。
  • 範圍廣泛的 SQL 查詢:即使使用者查詢的意圖良好,大型語言模型 (LLM) 仍可能產生會公開私密資料的 SQL 查詢。

使用參數化安全檢視區塊,可限制個別應用程式使用者可用的資料列範圍。無論使用者如何措辭查詢,這項控制項都能確保資料安全。

資料存取權管理

參數化安全檢視畫面可解決管理大量使用者資料存取權時的常見挑戰。

  • 簡化使用者管理:透過參數化安全檢視畫面,您可以使用單一資料庫角色為所有使用者提供服務,不必為每位使用者建立個別的資料庫使用者或角色。如果應用程式的每位使用者只需要存取自己的資料,參數化安全檢視畫面可簡化使用者和連線管理作業。舉例來說,在航空公司應用程式中,客戶只能查看自己的預訂記錄,因此您可以定義單一參數化安全檢視畫面,並以使用者 ID 做為參數。這個檢視區塊可讓單一資料庫角色 (有權存取檢視區塊,但無權存取基礎資料表) 為所有使用者提供服務,簡化使用者管理和資料庫連線。
  • 簡化安全強制執行:參數化安全檢視畫面本質上就包含存取權控管機制。查詢檢視畫面時,系統會一律強制執行定義的安全參數,無論存取檢視畫面的使用者是誰都一樣。相較之下,如果沒有額外設定,基本資料表上的基礎安全政策可能不會自動套用至檢視區塊。

如要進一步瞭解 PostgreSQL 現有的安全防護機制,例如資料列層級安全防護 (RLS) 政策,請參閱「資料列安全防護政策」。

安全機制

參數化安全檢視畫面會控管查詢存取基礎資料的方式,進一步提升安全性。應用程式開發人員可透過下列方法,確保資料安全及控管列存取權:

  • 使用 WITH (security barrier) 選項建立的檢視畫面可提供資料列層級的安全性,方法是防止惡意選擇的函式和運算子從資料列傳遞值,直到檢視畫面完成工作為止。如要進一步瞭解 WITH (security barrier) 子句,請參閱「規則和權限」。
  • 使用具名檢視參數進行參數化,可根據應用程式層級安全性 (例如使用者驗證),透過應用程式提供的值,對資料庫進行參數化,限制資料庫檢視畫面。
  • 對存取參數化檢視區塊的查詢強制執行額外限制,有助於應用程式執行來自使用者的不受信任查詢,例如由 AI 自然語言轉 SQL 生成的查詢。這可防止逸出參數化安全檢視區塊提供的安全範圍,並管理資源用量。詳情請參閱「強制對查詢施加限制」。

限制

  • 您必須在每個 AlloyDB for PostgreSQL 執行個體上,分別啟用參數化檢視區塊標記。在主要執行個體上建立的參數化檢視物件,會傳播至讀取集區執行個體和跨區域副本。不過,系統不會自動套用 parameterized_views.enabled 旗標設定,您必須在每個執行個體上手動設定。詳情請參閱「事前準備」。您必須先在每個執行個體上啟用 parameterized_views.enabled 旗標,才能在讀取集區執行個體或跨區域副本上查詢參數化檢視區塊。

後續步驟