Cloud SQL 中的參數化安全檢視區塊

PostgreSQL 適用的 Cloud SQL 中的參數化安全檢視畫面可為應用程式提供資料安全性和列存取控管,同時支援 SQL。這些檢視畫面支援資料值擷取 (從資料欄擷取特定資料片段的程序),並有助於防範提示詞注入攻擊。參數化安全檢視區塊可確保使用者只能查看自己有權存取的資料。

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

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

CREATE VIEW user_specific_items WITH (security_barrier) AS
       SELECT item_id, item_name, description
       FROM items t
       WHERE owner_id = $@app_user_id;

您可以使用 execute_parameterized_query 函式查詢檢視區塊,或執行 EXECUTE .. WITH VIEW PARAMETERS 陳述式。

用途

參數化安全檢視區塊可在資料庫層級提供資料安全性,防範來自不受信任來源的臨時查詢,例如從自然語言查詢翻譯而來的查詢。舉例來說,您可以使用參數化安全檢視區,為使用者可使用自然語言發出查詢的應用程式提供資料安全性,例如「顯示我的訂單」。

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

  • 查詢只會讀取您在資料庫參數化安全檢視中列出的資料庫物件和資料欄。
  • 查詢只會讀取與提交查詢的使用者相關聯的資料庫資料列。傳回的資料列與使用者的資料表資料列有資料關係。

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

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

  • 使用者可以提交提示詞注入攻擊,嘗試操縱基礎模型,揭露應用程式可存取的所有資料。
  • 自然語言轉 SQL (NL2SQL) 模型可能會產生範圍過廣的 SQL 查詢,這不符合資料安全性考量。即使使用者查詢立意良善,這項安全風險仍可能導致機密資料外洩。

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

資料安全性

應用程式開發人員可透過下列方法,使用參數化安全檢視區塊確保資料安全及控管列存取權:

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

限制

  • 如要使用參數化安全檢視區塊,您必須為 Cloud SQL 執行個體啟用 cloudsql.enable_parameterized_views 資料庫旗標,這需要重新啟動資料庫。

  • 您打算建立參數化安全檢視區的每個資料庫,都必須建立 parameterized_views 擴充功能。

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

後續步驟