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 陳述式。
用途
大型語言模型 (LLM) 可能會生成 SQL 查詢,導致機密資料外洩。
參數化安全檢視區塊可管理資料庫層級的資料安全性,特別是來自不受信任來源的臨時查詢,例如從自然語言翻譯的查詢。舉例來說,您可以使用參數化安全檢視區,為使用者可使用自然語言發出查詢的應用程式提供資料安全防護,例如「顯示我的訂單」。
您可以使用參數化安全檢視區塊,對 PostgreSQL 適用的 Cloud SQL 執行這項查詢的方式套用下列需求:
- 查詢只會讀取您在資料庫參數化安全檢視區塊中列出的資料庫物件和資料欄。
- 查詢只會讀取與提交查詢的使用者相關聯的資料庫列。傳回的資料列與使用者的資料表列有資料關係。
如要進一步瞭解如何設定安全性和存取權控管,請參閱「使用參數化安全檢視區塊」。
參數化安全檢視區塊有助於降低安全風險,避免使用者在資料庫表格上執行不受信任的查詢 (例如自然語言查詢)。安全風險包括:
- 使用者可以提交提示注入攻擊,嘗試操縱基礎模型,揭露應用程式可存取的所有資料。
- 自然語言轉 SQL (NL2SQL) 模型可能會生成範圍過廣的 SQL 查詢,這不符合資料安全考量。即使使用者查詢的意圖良好,這項安全風險仍可能導致機密資料外洩。
您可以使用參數化安全檢視區塊,定義不受信任的查詢可從中擷取資料的資料表和資料欄。您可以透過這些檢視畫面,限制個別應用程式使用者可用的資料列範圍。此外,您也可以透過這些限制,嚴格控管應用程式使用者可透過自然語言查詢查看的資料,無論使用者如何措辭查詢,都適用這項限制。
舉例來說,您可能有一個追蹤客戶訂單的應用程式。支援服務專員在應用程式中詢問:「客戶 12345 的訂單狀態為何?」在這種情況下,應用程式可以使用參數化安全檢視畫面,並搭配以顧客 ID 為依據的工作階段變數。參數化安全檢視表使用的查詢只會傳回與客戶 ID 12345 連結且可供存取的資料列。
使用參數化安全檢視畫面,即可限制個別應用程式使用者可用的資料列範圍。無論使用者如何措辭查詢,這項控制選項都能確保資料安全。
資料安全性
應用程式開發人員可透過下列方法,使用參數化安全檢視區塊確保資料安全及控管列存取權:
- 使用
WITH (security barrier)子句建立的檢視畫面可提供資料列層級的安全性,方法是防止惡意選擇的函式和運算子從資料列傳遞值,直到檢視畫面完成工作為止。如要進一步瞭解WITH (security barrier)子句,請參閱「規則和權限」。
具名檢視參數可根據值,限制資料庫的檢視範圍。這些值由應用程式根據應用程式層級的安全性 (例如使用者驗證) 提供。
對存取參數化檢視區塊的查詢強制執行額外限制,防止根據指定參數值,對檢視區塊中的檢查進行逸出攻擊。詳情請參閱「查詢限制」。
限制
如要使用參數化安全檢視區塊,您必須為 Cloud SQL 執行個體啟用
cloudsql.enable_parameterized_views資料庫旗標,這需要重新啟動資料庫。您要在哪個資料庫中建立參數化安全檢視區塊,就必須在該資料庫中建立
parameterized_views擴充功能。如果使用者定義函式參照參數化檢視區塊,且該函式是使用參數化安全檢視區塊中使用的任何 API 呼叫,就會發生錯誤。您必須在父項查詢中直接參照參數化檢視區塊。
- 查詢參數化安全檢視區塊時,會受到一些限制。詳情請參閱「查詢限制」。