VoltageSecureProtectAllKeys
此函数可帮助您定位使用嵌入式格式保留加密 (eFPE) 格式加密的列中的值。这些格式采样密钥轮换,因此您为一段纯文本返回的加密值会不断变化。如果向此函数传递一个未加密的值,它将返回一个包含两列的表:未加密的值以及使用为 eFPE 定义的每个密钥加密的值。表中的行数由 eFPE 格式包含的密钥数决定。通常,您可以在联接中使用此函数的输出来定位表中匹配的加密值。
语法
VoltageSecureProtectAllKeys(value USING PARAMETERS format='eFPE_format'
[, config_dfs_path=config_file]
[, identity=sd_identity] )
参数
示例
以下示例演示了对 VoltageSecureProtectAllKeys 的简单调用。
=> SELECT VoltageSecureProtectAllKeys('376765616314013' USING PARAMETERS
format='cc_num',
config_dfs_path='/voltagesecure/conf')
OVER ();
data | protected
-----------------+-----------------
376765616314013 | XMVMRU9RJVU4013
376765616314013 | X5FD4KO1UEE4013
376765616314013 | M7ZXTIQVCPB4013
376765616314013 | UBOSC9K3EXZ4013
376765616314013 | ZJ1C50C9L9R4013
(5 rows)
在此示例中,cc_num eFPE 格式定义了 5 个密钥,因此将返回一个包含 5 行的表。
以下示例显示了更常见的用法:查询使用 eFPE 格式加密的表列。
=> SELECT id, first_name, last_name FROM customers3 u
JOIN (SELECT VoltageSecureProtectAllKeys('376765616314013' USING PARAMETERS
format='cc_num',
config_dfs_path='/voltagesecure/conf')
OVER ()) pak
ON u.cc_num = pak.protected;
id | first_name | last_name
------+------------+-----------
5345 | Thane | Ross
(1 row)
在前面的示例中,customers3 表与 VoltageSecureProtectAllKeys 的输出相联接。如果 customers3 表中加密的 cc_num 列值与 VoltageSecureProtectAllKeys 的受保护列中的值匹配,则该表中的所有行都会出现在输出中。
如果您在非 eFPE 格式下使用此函数,将返回错误:
=> SELECT first_name, last_name, ssn FROM customers u
JOIN (
SELECT VoltageSecureProtectAllKeys('232-28-0657' USING PARAMETERS format='ssn',
config_dfs_path='/voltagesecure/conf')
OVER ()
)
pak ON u.ssn = pak.protected;
ERROR 5861: Error calling processPartition() in User Function VoltageSecureProtectAllKeys
at [ProtectAllKeys.cpp:21], error code: 1711, message: Error getting key numbers:
eFPE format required