選擇信標類型 - AWS 資料庫加密 SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

選擇信標類型

我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。本開發人員指南仍提供 DynamoDB 加密用戶端的相關資訊。

透過可搜尋的加密,您可以透過將加密欄位中的明文值與信標對應,來搜尋加密的記錄。您設定的信標類型會決定您可以執行的查詢類型。

強烈建議您在設定信標之前,先識別並規劃您需要執行的查詢類型。設定信標之後,您必須先設定每個信標的次要索引,才能搜尋加密的欄位。如需詳細資訊,請參閱 使用信標設定次要索引

信標會在寫入欄位的純文字值與實際儲存在資料庫中的加密值之間建立對應。您無法比較兩個標準信標的值,即使它們包含相同的基礎純文字也一樣。兩個標準信標將為相同的明文值產生兩個不同的 HMAC 標籤。因此,標準信標無法執行下列查詢。

  • beacon1 = beacon2

  • beacon1 IN (beacon2)

  • value IN (beacon1, beacon2, ...)

  • CONTAINS(beacon1, beacon2)

只有在比較複合信標的已簽署部分時,才能執行上述查詢,但CONTAINS運算子除外,您可以搭配複合信標使用該運算子來識別組合信標所包含之加密或已簽署欄位的整個值。比較已簽署零件時,您可以選擇性地包含加密零件的前置詞,但不能包括欄位的加密值。如需有關標準和複合信標可執行之查詢類型的詳細資訊,請參閱查詢信標。

檢閱資料庫存取模式時,請考慮下列可搜尋的加密解決方案。下列範例定義要設定哪個信標,以滿足不同的加密和查詢需求。

標準信標

標準信標只能執行相等搜尋。您可以使用標準信標來執行下列查詢。

查詢單一加密欄位

如果要識別包含加密欄位之特定值的記錄,請建立標準信標。

在下列範例中,請考慮名UnitInspection為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_idinspection_dateinspector_id_last4、和的欄位unit。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_idinspector_id_last4unit欄位會標示ENCRYPT_AND_SIGN密碼編譯動作中。

以下是資料庫中純文字項目的範例。UnitInspection

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
查詢記錄中的單一加密欄位

如果inspector_id_last4欄位需要加密,但您仍需要查詢它是否完全相符,請從inspector_id_last4欄位建構標準信標。然後,使用標準信標建立次要索引。您可以使用此次要索引來查詢加密inspector_id_last4欄位。

如需設定標準信標的說明,請參閱設定標準信標

查詢虛擬欄位

虛擬欄位是由一個或多個來源欄位建構的概念欄位。如果您想要針對加密欄位的特定區段執行相等搜尋,或對多個欄位的串連執行相等搜尋,請從虛擬欄位建構標準信標。所有虛擬欄位必須至少包含一個加密來源欄位。

下列範例會建立Employees資料庫的虛擬欄位。以下是資料庫中的明文記錄範例。Employees

{ "EmployeeID": 101, "SSN": 000-00-0000, "LastName": "Jones", "FirstName": "Mary", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }
查詢加密欄位的區段

在此範例中,SSN欄位已加密。

如果您要使用社會安全號碼的最後四位數來查詢SSN欄位,請建立一個虛擬欄位來識別您計劃查詢的區段。

構造的虛擬Last4SSN字段Suffix(4)使您能夠查詢Last4SSN=0000。使用此虛擬欄位可建構標準信標。然後,使用標準信標建立次要索引。您可以使用此次要索引來查詢虛擬欄位。這個查詢返回與您指定的最後四個數字結束的SSN值的所有記錄。

查詢多個字段的連接
注意

下列範例會示範轉換的類型,以及您可以使用虛擬欄位執行的查詢。在應用程式中,此範例中使用的範例欄位可能不符合信標的分佈相互關聯唯一性建議。

如果您想要對FirstNameLastName欄位的串連執行相等搜尋,您可以建立一個虛擬欄位,從NameTag欄位的第一個字母建構,後面接著FirstName欄位,全部以小寫形式建構。LastName使用此虛擬欄位可建構標準信標。然後,使用標準信標建立次要索引。您可以使用此次要索引來查詢NameTag=mjones虛擬欄位。

必須至少加密其中一個來源欄位。FirstName或者LastName可以加密,或者它們都可以加密。任何純文字來源欄位都必須SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT在您的密碼編譯動作中標示為SIGN_ONLY或。

如需設定虛擬欄位及其使用這些欄位的信標的說明,請參閱建立虛擬欄位。

複合信標

合信標會從常值純文字字串和標準信標建立索引,以執行複雜的資料庫作業。您可以使用複合信標來執行下列查詢。

在單一索引上查詢加密欄位的組合

如果您需要查詢單一索引上加密欄位的組合,請建立複合信標,該信標會結合為每個加密欄位建構的個別標準信標,以形成單一索引。

設定複合信標之後,您可以建立次要索引,將複合信標指定為執行完全相符查詢的分割區索引鍵,或使用排序索引鍵來執行更複雜的查詢。將複合信標指定為排序索引鍵的次要索引可以執行完全比對查詢和更多自訂的複雜查詢。

對於下列範例,請考慮名UnitInspection為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_idinspection_dateinspector_id_last4、和的欄位unit。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_idinspector_id_last4unit欄位會標示ENCRYPT_AND_SIGN密碼編譯動作中。

以下是資料庫中純文字項目的範例。UnitInspection

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
對加密欄位的組合執行相等搜尋

如果您要查詢UnitInspection資料庫中的完全相符項目inspector_id_last4.unit,請先為inspector_id_last4unit欄位建立不同的標準信標。然後,從兩個標準信標創建一個複合信標。

設定複合信標之後,請建立次要索引,將複合信標指定為分割區索引鍵。使用此次要索引來查詢上的完全相符項目inspector_id_last4.unit。例如,您可以查詢此信標,以尋找檢查員針對指定單位執行的檢驗清單。

對加密欄位的組合執行複雜的查詢

如果您要查詢和的UnitInspection資料庫inspector_id_last4.unit,請先為inspector_id_last4unit欄位建立不同的inspector_id_last4標準信標。然後,從兩個標準信標創建一個複合信標。

設定複合信標之後,請建立次要索引,將複合信標指定為排序索引鍵。使用此次要索引來查詢UnitInspection資料庫中是否有以特定檢查器開頭的項目,或查詢資料庫中特定單位 ID 範圍內的所有單位清單,這些單位已由特定檢查器檢查。您也可以在上執行完全相符搜尋inspector_id_last4.unit

如需設定複合信標的說明,請參閱設定複合信標

在單一索引上查詢加密和純文字欄位的組合

如果您需要查詢單一索引上加密和純文字欄位的組合,請建立結合個別標準信標和純文字欄位的複合信標,以形成單一索引。用於建構複合信標的純文字欄位必須標記SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT在您的密碼編譯動作中。

設定複合信標之後,您可以建立次要索引,將複合信標指定為執行完全相符查詢的分割區索引鍵,或使用排序索引鍵來執行更複雜的查詢。將複合信標指定為排序索引鍵的次要索引可以執行完全比對查詢和更多自訂的複雜查詢。

對於下列範例,請考慮名UnitInspection為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_idinspection_dateinspector_id_last4、和的欄位unit。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_idinspector_id_last4unit欄位會標示ENCRYPT_AND_SIGN密碼編譯動作中。

以下是資料庫中純文字項目的範例。UnitInspection

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
對欄位組合執行相等搜尋

如果您要查詢UnitInspection資料庫,以查詢特定檢查員在特定日期進行的檢查,請先為inspector_id_last4欄位建立標準信標。該inspector_id_last4字段在密碼編譯操作ENCRYPT_AND_SIGN中標記。所有加密零件都需要自己的標準信標。此inspection_date欄位已標記,SIGN_ONLY且不需要標準信標。接下來,從inspection_date現場和標準信標創建一個複合信inspector_id_last4標。

設定複合信標之後,請建立次要索引,將複合信標指定為分割區索引鍵。使用此次要索引來查詢資料庫中與特定檢查程式和檢查日期完全相符的記錄。例如,您可以查詢資料庫,以取得 ID 在特定日期結束的檢8744查員的所有檢查清單。

對欄位組合執行複雜的查詢

如果您要查詢資料庫是否在某個inspection_date範圍內進行的檢驗,或查詢資料庫是否有針對inspector_id_last4inspection_date限制的特定執行的檢驗inspector_id_last4.unit,請先為inspector_id_last4unit欄位建立不同的標準信標。然後,從純文inspection_date字欄位和兩個標準信標建立複合信標。

設定複合信標之後,請建立次要索引,將複合信標指定為排序索引鍵。使用此次要索引可針對特定檢查員在特定日期進行的檢查執行查詢。例如,您可以在資料庫中查詢在同一日期檢查的所有單位清單。或者,您可以查詢資料庫,以取得在指定檢驗日期範圍內,針對特定單位執行的所有檢驗清單。

如需設定複合信標的說明,請參閱設定複合信標