全部產品
Search
文件中心

ApsaraDB RDS:明文和密文的轉換

更新時間:Jun 19, 2024

使用全密態資料庫執行個體時,支援修改列類型(明文類型修改為密文類型,密文類型修改為明文類型)。

前提條件

文法

ALTER TABLE <table_name> 
    ALTER COLUMN <column_name> [SET DATA] TYPE <目標類型> 
    USING <類型轉換函式>(<column_name>[, <keyname>]);
說明
  • 密文轉換明文時,只需配置column_name參數。

  • 明文轉換密文時,可僅配置column_name參數,或可同時配置column_namekeyname

表 1. 類型轉換函式說明

明文類型

密文類型

明文到密文轉換函式

密文到明文轉換函式

int4

enc_int4

encdb.enc_int4_encrypt

encdb.decrypt

int8

enc_int8

encdb.enc_int8_encrypt

encdb.decrypt

float4

enc_float4

encdb.enc_float4_encrypt

encdb.decrypt

float8

enc_float8

encdb.enc_float8_encrypt

encdb.decrypt

numeric

enc_decimal

encdb.enc_decimal_encrypt

encdb.decrypt

text

enc_text

encdb.enc_text_encrypt

encdb.decrypt

timestamp

enc_timestamp

encdb.enc_timestamp_encrypt

encdb.decrypt

使用樣本

  • 使用構建的keyname對應的密鑰將明文列修改為密文列。

    1. 構建keyname。

      SELECT encdb.keyname_generate(<user_name>, <database_name>, <schema_name>, <table_name>, <column_name>);
    2. 為keyname產生密鑰。

      SELECT encdb.dek_generate(<keyname>[, <json_params>]);

      encdb.dek_generate中的參數json_params可選,使用標準JSON格式,可配置的索引值對範圍如下:

      說明

      algorithm

      密碼編譯演算法。

      預設值:AES_128_GCM。

      policy

      DEFAULT

      加密策略,預留參數,當前固定配置為DEFAULT。

      flags

      • RND

      • DET

      加密方案。

      • RND:隨機加密。

      • DET:確定性加密。

      預設值:RND。

      mekid

      目標使用者的MEK ID。

      用於產生DEK的使用者主要金鑰ID。

      預設為當前串連使用者的主要金鑰ID。

    3. 使用keyname對應的密鑰,將明文列(例如int4)修改為對應類型的密文列(例如enc_int4)。

      ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>, <keyname>);
  • 使用當前資料庫預設密鑰將明文列修改為密文列。

    說明

    當前資料庫預設密鑰的keyname為|<user>|<database>|

    ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>);
  • 將密文列修改為明文列。

    ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE int4 USING encdb.decrypt(<column_name>);