參數化安全檢視區塊總覽

本文說明 PostgreSQL 適用的 AlloyDB 中的參數化安全檢視區塊,這類檢視區塊可提供應用程式資料安全性和列存取權控管,同時支援 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 陳述式。

用途

參數化安全檢視畫面非常適合在資料庫層級管理資料安全,防範來自不受信任來源的臨時查詢,例如從自然語言查詢翻譯而來的查詢。舉例來說,假設某個應用程式的資料庫會追蹤旅客的託運行李。這些客戶可以對應用程式發出查詢。舉例來說,應用程式使用者 ID 為 12345 的顧客可以在應用程式中輸入查詢,例如「我的行李在哪裡?」

您可以使用參數化安全檢視區塊,對 AlloyDB 執行這項查詢的方式套用下列要求:

  • 查詢只能讀取您在資料庫參數化安全檢視畫面中列出的資料庫物件和資料欄。
  • 查詢只能讀取與提交查詢的使用者相關聯的資料庫列。傳回的資料列與使用者資料列有資料關係,後者的 ID 資料欄值為 12345

如要進一步瞭解如何設定安全性和存取權控管,請參閱「使用參數化安全檢視畫面,確保應用程式資料安全並控管存取權」。

如果允許使用者在資料庫表格上執行不受信任的查詢 (例如自然語言查詢),可能會發生安全風險,而參數化安全檢視畫面有助於降低這類風險。安全風險包括:

  • 使用者可以提交提示注入攻擊,嘗試操縱基礎模型,揭露應用程式可存取的所有資料。
  • 基於資料安全考量,LLM 可能會生成範圍比適當範圍更廣的 SQL 查詢。即使使用者查詢立意良善,這項安全風險仍可能導致機密資料外洩。

使用參數化安全檢視區塊,您可以定義不受信任的查詢可從中擷取資料的資料表和資料欄。這些檢視畫面可讓您限制個別應用程式使用者可用的資料列範圍。此外,無論使用者如何措辭,您都能透過這些限制嚴格控管應用程式使用者可透過自然語言查詢查看的資料。

安全機制

應用程式開發人員可透過參數化安全檢視畫面,使用下列方法控管資料安全性和列存取權:

  • 使用 WITH (security barrier) 選項建立的檢視畫面可提供資料列層級的安全性,方法是防止惡意選擇的函式和運算子從資料列傳遞值,直到檢視畫面完成工作為止。如要進一步瞭解 WITH (security barrier) 子句,請參閱「規則和權限」。
  • 使用具名檢視參數進行參數化,可根據應用程式層級的安全性 (例如使用者驗證),透過應用程式提供的值,對資料庫進行參數化,限制資料庫的檢視範圍。
  • 對存取參數化檢視區塊的查詢強制執行額外限制,防止根據指定參數值,對檢視區塊中的檢查進行規避攻擊。詳情請參閱「查詢的強制限制」。

限制

  • 如果參數化檢視區塊在使用者定義函式中遭到參照,而該函式是使用參數化安全檢視區塊中使用的任何 API 呼叫,就會發生錯誤。您必須在父項查詢中直接參照參數化檢視區塊。

  • 您必須在每個 AlloyDB 執行個體上分別啟用參數化檢視區塊旗標。在主要執行個體上建立的參數化檢視物件,會傳播至唯讀副本和跨區域副本。不過,parameterized_views.enabled 旗標設定不會自動複製,必須在每個執行個體上手動複製。詳情請參閱「事前準備」。您必須先在每個副本執行個體上啟用 parameterized_views.enabled 標記,才能在副本上查詢參數化檢視區塊。這項限制不適用於待命執行個體。

後續步驟