參數化檢視區塊總覽

在 Bigtable 中,您可以使用參數化檢視畫面,根據應用程式環境動態篩選邏輯檢視畫面的資料範圍。這種做法可保護應用程式免於 SQL 注入攻擊,並減少多個靜態檢視區塊的需求。

為處理私密資訊,Bigtable 參數化檢視區塊會使用與 SQL 查詢文字不同的獨立環境。由於資料庫會在伺服器端繫結這些值,使用者和 AI 代理程式無法操控查詢參數。無論您如何編寫查詢,資料庫都會自動限制特定情境的資料存取權。

參數化檢視區塊的優點

參數化檢視區塊非常適合在資料庫層級管理資料範圍,特別是在處理從自然語言翻譯而來的任意形式查詢的應用程式中。資料範圍設定是指將查詢結果限制在特定資料子集。這些檢視畫面提供彈性的實作方式,可執行下列操作:

  • 深層身分傳播:在使用者層級強制執行精細的資料權限,確保使用者只能存取自己的資料內容。舉例來說,應用程式可確保使用者或房客只會擷取指定界線內的資料列。
  • 簡化使用者管理作業:為所有資料庫使用者使用單一資料庫角色,而不是為每位使用者設定個別角色。
  • 參數隔離:參數化檢視區塊會將值做為獨立情境傳遞,不受 LLM 或使用者控制,藉此降低風險。由於這些值與查詢文字分開儲存,因此使用者或產生查詢的 AI 代理程式無法操控這些值。
  • 防範 SQL 注入:建構應用程式時,在查詢文字中於用戶端替換參數可能會導致查詢遭到操控。參數化檢視區塊會在剖析查詢結構後,於伺服器端執行參數繫結,藉此降低這項風險。這樣可防止 SQL 注入,因為攻擊者控制的值無法變更查詢結構。

舉例來說,假設某個健康追蹤應用程式會儲存患者的醫療記錄,包括膽固醇濃度。如果病患查詢自己的資料,惡意或行為不當的代理程式可能會產生或要求查詢,試圖擷取其他病患的記錄。應用程式會使用參數化檢視畫面,在資料庫層級強制執行患者隔離。檢視區塊是使用 patient_id 檢視區塊參數定義:

CREATE VIEW patient_health_pv AS
(SELECT * FROM patient_health_records WHERE patient_id = CAST(VIEW_PARAMETERS('patient_id') AS BYTES))

當用戶端想查詢病患的cholesterol讀取作業時:

SELECT readings['value'], readings['date']
FROM patient_health_pv
WHERE readings['test_name'] = 'cholesterol'

由於系統會查詢檢視區塊,Bigtable 會自動繫結並套用來自獨立參數對映的 patient_id 值。LLM 或使用者無法變更或捨棄這項篩選器,確保使用者層級的範圍受到嚴密控管,並消除 SQL 注入向量。

參數化檢視區塊的運作方式

參數化檢視區塊會使用稱為「檢視區塊參數」的機制,將應用程式層級的背景資訊 (例如使用者 ID) 安全地傳遞至資料庫。參數化檢視區塊會將檢視區塊參數值做為獨立的個別內容,連同查詢要求一併傳遞,藉此達成上述目的。Bigtable 隨後可在查詢執行期間存取這個內容,但查詢本身無法讀取或修改內容。

VIEW_PARAMETERS() 函式是 SQL 介面,用於在檢視畫面定義中存取這些參數。舉例來說,如要根據提出查詢的使用者 ID 篩選資料,可以在資料檢視的 WHERE 子句中加入下列內容:

CREATE VIEW purchase_history_pv AS
(SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES))

您也可以使用 VIEW_PARAMETERS() 參數化資料欄限定符。這樣一來,檢視畫面就能根據提供的應用程式環境動態傳回特定欄位。

CREATE VIEW specific_test_result_pv AS
SELECT
  tests[VIEW_PARAMETERS('test_name')] AS reading,
  _timestamp AS reading_time
FROM patients

與標準查詢參數的差異

檢視畫面參數的運作方式與標準查詢參數不同:

  • 語法和內容:標準查詢參數是使用 @param 語法定義,且無法在檢視定義中宣告,只能在查詢中宣告。檢視畫面參數是使用 VIEW_PARAMETERS('key') 函式存取,該函式可在任何查詢或檢視畫面環境中呼叫。
  • Fail-closed 行為:如果查詢包含 VIEW_PARAMETERS('key') 參照的檢視畫面定義,但要求檢視畫面參數對應中未提供相應值,查詢會立即失敗並顯示 not found / missing parameter 錯誤。如果設定套用錯誤,可避免資料意外曝光。

限制

參數化檢視區塊有以下限制:

  • 您只能從邏輯檢視區塊建立參數化檢視區塊。您可以使用 Google Cloud CLI 建立新的參數化邏輯檢視區塊。您不會修改現有的邏輯檢視畫面。
  • 檢視參數僅支援字串類型的值。如果參數在檢視區塊的 SQL 定義中代表不同的資料類型,您必須將參數值做為字串傳遞,並在檢視區塊定義中轉換,例如 CAST(VIEW_PARAMETERS('parameter_name') AS INT64)

後續步驟