

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Clean Rooms 加密计算中的列类型
<a name="crypto-computing-column-types"></a>

本主题提供有关 Clean Rooms 加密计算中列类型的信息。

**Topics**
+ [Fingerprint 列](#fingerprint-columns)
+ [密封列](#sealed-columns)
+ [Cleartext 列](#cleartext-columns)

## Fingerprint 列
<a name="fingerprint-columns"></a>

*Fingerprint 列*是在 JOIN 语句中使用的受加密保护的列。

fingerprint 列中的数据无法解密。只有密封列中的数据才能解密。

Fingerprint 列只能在以下 SQL 子句和函数中使用：
+ JOIN (INNER, OUTER, LEFT, RIGHT, or FULL) 与其他 fingerprint 列对比：
  + 如果将 `allowJoinsOnColumnsWithDifferentNames` 参数的值设置为 `false`，则 JOIN 的两个 fingerprint 列的名称也必须相同。
+ `SELECT COUNT()`
+ `SELECT COUNT(DISTINCT )`
+ `GROUP BY`（仅当协作将 `preserveNulls` 参数的值设置为 `true` 时才使用。）

违反这些限制条件的查询可能会生成不正确的结果。

## 密封列
<a name="sealed-columns"></a>

*密封列* 是 SELECT 语句中使用的通过加密保护的列。

密封列只能在以下 SQL 子句和函数中使用：
+ `SELECT`
+ `SELECT ... AS`
+ `SELECT COUNT()`
**注意**  
不支持 `SELECT COUNT(DISTINCT )`。

违反这些限制条件的查询可能会生成不正确的结果。

### 加密前为 sealed 列填充数据
<a name="padding-data"></a>

当您指定列应该是 sealed 列时，C3R 会询问您要选择哪种*填充*。加密前填充数据是可选的。如果不使用填充（填充类型为 `none`），则加密数据的长度表示 cleartext 的大小。在某些情况下，cleartext 的大小可能会暴露明文。如果使用填充（填充类型为 `fixed` 或 `max`），则先将所有值填充到常见大小，然后再加密。使用填充时，加密数据的长度除了给出其大小的上限外，不提供有关原始 cleartext 长度的信息。

如果要为列填充并且已知该列中数据的最大字节长度，请使用 `fixed` 填充。使用至少与该列中最长值的字节长度一样大的 `length` 值。

**注意**  
如果值长于提供的 `length` 值，则会发生错误并导致加密失败。

如果要为列填充并且未知该列中数据的最大字节长度，请使用 `max` 填充。这种填充模式将所有数据填充到最长值的长度加上额外的 `length` 字节。

**注意**  
您可能需要批量加密数据，或者定期使用新数据更新表。请注意，`max` 填充会将条目填充到给定批次中最长的明文条目的长度（加 `length` 字节）。这意味着加密文字长度可能因批次而异。因此，如果您知道列的最大字节长度，则应使用 `fixed` 而不是 `max`。

## Cleartext 列
<a name="cleartext-columns"></a>

*Cleartext 列*是在 JOIN 或 SELECT 语句中使用的未受加密保护的列。

Cleartext 列可以用于 SQL 查询的任何部分。