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

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

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

參數化安全檢視區塊範例

以下範例說明如何在資料表的 WHERE 子句中加入工作階段變數,建立參數化安全檢視區塊。

-- Create a view with a parameter

CREATE VIEW v_orders AS
SELECT * FROM orders
WHERE customer_id = @local_customer_id AND year >= @earliest_year;

接著,您可以設定檢視區塊的參數並執行查詢。

-- Set the parameter and query

SELECT /*+ SET_VIEW_VARS(local_customer_id=5, earliest_year=2021) */ * FROM v_orders;

-- Or query through a stored procedure

CALL mysql.execute_parameterized_query(
    'SELECT * FROM db.v_orders',
    'local_customer_id = 5, earliest_year = 2021');

用途

大型語言模型 (LLM) 可能會生成 SQL 查詢,導致機密資料外洩。

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

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

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

如要進一步瞭解如何設定安全性和存取權控管,請參閱「使用參數化安全檢視區塊」。

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

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

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

舉例來說,您可能有一個追蹤客戶訂單的應用程式。支援服務專員在應用程式中詢問:「客戶 12345 的訂單狀態為何?」在這種情況下,應用程式可以使用參數化安全檢視畫面,並搭配以顧客 ID 為依據的工作階段變數。參數化安全檢視表使用的查詢只會傳回與客戶 ID 12345 連結且可供存取的資料列。

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

資料安全性

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

  • MySQL 參數化安全檢視區塊可防止惡意選取的函式和運算子從資料列傳遞值,直到檢視區塊完成工作為止,藉此提供資料列層級安全性。
  • 具名檢視參數可根據值,限制資料庫的檢視範圍。這些值由應用程式根據應用程式層級的安全性 (例如使用者驗證) 提供。

  • 對存取參數化檢視區塊的查詢強制執行額外限制,防止根據指定參數值,對檢視區塊中的檢查進行逸出攻擊。詳情請參閱「查詢限制」。

簡化使用者管理

使用參數化安全檢視區塊時,您可以使用單一資料庫角色為所有使用者提供服務,而不必使用可能需要為每位使用者建立個別資料庫使用者或角色的方法。如果每個使用者只需要存取自己的資料,這項功能有助於簡化應用程式的使用者和連線管理作業。

舉例來說,在應用程式中,使用者只能查看特定客戶的訂單,這時您可以定義單一參數化安全檢視畫面,並以使用者 ID 參數化。這個檢視畫面可讓單一資料庫角色 (有權存取檢視畫面,而非基礎資料表) 為所有使用者提供服務,簡化使用者管理和資料庫連線。

限制

  • 參數化安全檢視區塊僅適用於 MySQL 適用的 Cloud SQL 8.0.43 以上版本。如果您嘗試在舊版 MySQL 中建立參數化安全檢視區塊,Cloud SQL 會傳回錯誤。

  • 您無法在 WHEREHAVINGON 子句以外指定變數。

  • 您無法在參數化安全檢視區塊中使用 EXPLAIN

  • 查詢參數化安全檢視區塊時,會受到一些限制。詳情請參閱「查詢限制」。

後續步驟