本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
選擇信標類型
我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。本開發人員指南仍提供 DynamoDB 加密用戶端的相關資訊。 |
透過可搜尋的加密,您可以透過將加密欄位中的明文值與信標對應,來搜尋加密的記錄。您設定的信標類型會決定您可以執行的查詢類型。
強烈建議您在設定信標之前,先識別並規劃您需要執行的查詢類型。設定信標之後,您必須先設定每個信標的次要索引,才能搜尋加密的欄位。如需詳細資訊,請參閱 使用信標設定次要索引。
信標會在寫入欄位的純文字值與實際儲存在資料庫中的加密值之間建立對應。您無法比較兩個標準信標的值,即使它們包含相同的基礎純文字也一樣。兩個標準信標將為相同的明文值產生兩個不同的 HMAC 標籤。因此,標準信標無法執行下列查詢。
-
beacon1
=beacon2
-
beacon1
IN (beacon2
) -
value
IN (beacon1
,beacon2
, ...) -
CONTAINS(
beacon1
,beacon2
)
只有在比較複合信標的已簽署部分時,才能執行上述查詢,但CONTAINS
運算子除外,您可以搭配複合信標使用該運算子來識別組合信標所包含之加密或已簽署欄位的整個值。比較已簽署零件時,您可以選擇性地包含加密零件的前置詞,但不能包括欄位的加密值。如需有關標準和複合信標可執行之查詢類型的詳細資訊,請參閱查詢信標。
檢閱資料庫存取模式時,請考慮下列可搜尋的加密解決方案。下列範例定義要設定哪個信標,以滿足不同的加密和查詢需求。
標準信標
標準信標只能執行相等搜尋。您可以使用標準信標來執行下列查詢。
查詢單一加密欄位
如果要識別包含加密欄位之特定值的記錄,請建立標準信標。
在下列範例中,請考慮名UnitInspection
為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_id
、inspection_date
inspector_id_last4
、和的欄位unit
。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4
只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_id
。inspector_id_last4
和unit
欄位會標示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
值的所有記錄。 - 查詢多個字段的連接
-
如果您想要對
FirstName
和LastName
欄位的串連執行相等搜尋,您可以建立一個虛擬欄位,從NameTag
欄位的第一個字母建構,後面接著FirstName
欄位,全部以小寫形式建構。LastName
使用此虛擬欄位可建構標準信標。然後,使用標準信標建立次要索引。您可以使用此次要索引來查詢NameTag=mjones
虛擬欄位。必須至少加密其中一個來源欄位。
FirstName
或者LastName
可以加密,或者它們都可以加密。任何純文字來源欄位都必須SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
在您的密碼編譯動作中標示為SIGN_ONLY
或。
如需設定虛擬欄位及其使用這些欄位的信標的說明,請參閱建立虛擬欄位。
複合信標
複合信標會從常值純文字字串和標準信標建立索引,以執行複雜的資料庫作業。您可以使用複合信標來執行下列查詢。
在單一索引上查詢加密欄位的組合
如果您需要查詢單一索引上加密欄位的組合,請建立複合信標,該信標會結合為每個加密欄位建構的個別標準信標,以形成單一索引。
設定複合信標之後,您可以建立次要索引,將複合信標指定為執行完全相符查詢的分割區索引鍵,或使用排序索引鍵來執行更複雜的查詢。將複合信標指定為排序索引鍵的次要索引可以執行完全比對查詢和更多自訂的複雜查詢。
對於下列範例,請考慮名UnitInspection
為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_id
、inspection_date
inspector_id_last4
、和的欄位unit
。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4
只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_id
。inspector_id_last4
和unit
欄位會標示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_last4
和unit
欄位建立不同的標準信標。然後,從兩個標準信標創建一個複合信標。設定複合信標之後,請建立次要索引,將複合信標指定為分割區索引鍵。使用此次要索引來查詢上的完全相符項目
inspector_id_last4.unit
。例如,您可以查詢此信標,以尋找檢查員針對指定單位執行的檢驗清單。 - 對加密欄位的組合執行複雜的查詢
-
如果您要查詢和的
UnitInspection
資料庫inspector_id_last4.unit
,請先為inspector_id_last4
和unit
欄位建立不同的inspector_id_last4
標準信標。然後,從兩個標準信標創建一個複合信標。設定複合信標之後,請建立次要索引,將複合信標指定為排序索引鍵。使用此次要索引來查詢
UnitInspection
資料庫中是否有以特定檢查器開頭的項目,或查詢資料庫中特定單位 ID 範圍內的所有單位清單,這些單位已由特定檢查器檢查。您也可以在上執行完全相符搜尋inspector_id_last4.unit
。
如需設定複合信標的說明,請參閱設定複合信標。
在單一索引上查詢加密和純文字欄位的組合
如果您需要查詢單一索引上加密和純文字欄位的組合,請建立結合個別標準信標和純文字欄位的複合信標,以形成單一索引。用於建構複合信標的純文字欄位必須標記SIGN_ONLY
或SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
在您的密碼編譯動作中。
設定複合信標之後,您可以建立次要索引,將複合信標指定為執行完全相符查詢的分割區索引鍵,或使用排序索引鍵來執行更複雜的查詢。將複合信標指定為排序索引鍵的次要索引可以執行完全比對查詢和更多自訂的複雜查詢。
對於下列範例,請考慮名UnitInspection
為追蹤生產設施之檢驗資料的資料庫。資料庫中的每個記錄都包含稱為work_id
、inspection_date
inspector_id_last4
、和的欄位unit
。完整的檢查員識別碼是介於 0 至 99,999,999 之間的數字。但是,為了確保數據集均勻分佈,inspector_id_last4
只存儲檢查器 ID 的最後四位數。數據庫中的每個字段由主鍵標識work_id
。inspector_id_last4
和unit
欄位會標示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_last4
或inspection_date
限制的特定執行的檢驗inspector_id_last4.unit
,請先為inspector_id_last4
和unit
欄位建立不同的標準信標。然後,從純文inspection_date
字欄位和兩個標準信標建立複合信標。設定複合信標之後,請建立次要索引,將複合信標指定為排序索引鍵。使用此次要索引可針對特定檢查員在特定日期進行的檢查執行查詢。例如,您可以在資料庫中查詢在同一日期檢查的所有單位清單。或者,您可以查詢資料庫,以取得在指定檢驗日期範圍內,針對特定單位執行的所有檢驗清單。
如需設定複合信標的說明,請參閱設定複合信標。