DECRYPT
Decrypts an encrypted column using the key(s) specified in the column encryption specification.
Syntax​
DECRYPT ( column_expression )
Arguments​
column-expression
Specifies a column belonging to a blockchain.
The column must appear in the FROM clause of the SELECT statement, but is not required to appear in the SELECT list.
Return Value​
Data of the column_expressions underlying data type.
Remarks​
- Non-encrypted arguments will cause the query to error.
- If the login doesn't have access to the encryption key, the query will error.
- The
DECRYPT
function can be used in the SELECT, HAVING, and WHERE clauses. - On creation the
DECRYPT
keyword can be used in the CHECK and COMPUTED column specifications. - Columns with indexes can't be encrypted.
- Encrypted columns can't be compared without decrypting them first.
Examples​
This section creates a blockchain and illustrates the functionality of the DECRYPT
keyword.
The build​
Lets assume that we have access to the following symmetric keys named: "k9_ssn key", "dog_name key", "verified key"
The CREATE BLOCKCHAIN statement below creates a TRADITIONAL
blockchain with five
columns:
- id: basic incrementing primary key.
- k9_ssn: an INT64 encrypted by the "ssn key" with
LEVEL ONE
validity tracking using the "k9_ssn key" - last_name: a STRING encrypted by the "last_name key" with
LEVEL TWO
validity tracking. There is also a check constraint that checks, once decrypted, if the k9_ssn value is null. - verified: a BOOL encrypted by the "verified key" with no validity tracking.
- loves_treats: a BOOL that is computed from the decrypted verified value.
CREATE BLOCKCHAIN members TRADITIONAL (
id UINT64 PRIMARY AUTO INCREMENT,
k9_ssn INT64 ENCRYPT = "k9_ssn key" TRACK VALIDITY [ "k9_ssn key", LEVEL ONE],
last_name STRING PACKED ENCRYPT = "last_name key" TRACK VALIDITY [ "last_name key", LEVEL TWO] CHECK [NOT(ISNULL(DECRYPT(ssn)))],
verified BOOL ENCRYPT = "verified key",
loves_treats BOOL COMPUTED [DECRYPT(verified))];
Let's assume the following mutation has been executed.
INSERT members (k9_ssn, last_name, verified) VALUES
(1, "rolly", true),
(2, "hank", false),
(3, "clover", true);
A. Querying from encrypted columns.​
Reading from encrypted columns without decrypting returns columns of type BYTE ARRAY. The following query will execute but the k9_ssn, last_name, and verified columns will show the encrypted bytes.
SELECT * FROM members;
On the other hand, the below query fails when performing an operation on an encrypted column.
SELECT * FROM members WHERE verified = true
B. Decrypting in the select clause.​
The following example decrypts the encrypted columns on output.
SELECT DECRYPT(k9_ssn), DECRYPT(last_name), DECRYPT(verified), loves_treats FROM members;
Response:
DECRYPT(k9_ssn) [INT64] DECRYPT(LAST_NAME) [STRING] DECRYPT(VERIFIED) [BOOL] LOVES_TREATS [BOOL]
1 rolly true true
2 hank false false
3 clover true true
C. Joining encrypted columns.​
This example illustrates that the DECRYPT
operation can be applied in the WHERE clause. Once the operation
is applied, columns and data behave normally.
SELECT DECRYPT(m_one.last_name), DECRYPT(m_two.last_name)
FROM members AS m_one JOIN members AS m_two
ON DECRYPT(m_one.last_name) = DECRYPT(m_two.last_name);
Response:
DECRYPT(M_ONE.LAST_NAME) [STRING] DECRYPT(M_TWO.LAST_NAME) [STRING]
rolly rolly
hank hank
clover clover