全部產品
Search
文件中心

ApsaraDB RDS:明文和密文的轉換

更新時間:Oct 24, 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>, '<keyname>');

常見問題

  • Q:如何處理報錯:ERROR: xxxx generate dek for keyname errno:f70a0000

    A:該錯誤表明未使用EncDB SDK的方式完成一次資料庫連接。使用EncDB SDK的方式完成了一次資料庫連接,請參見EncDB SDK用戶端使用說明

  • Q:如何處理報錯:ERROR: xxxx errno:fa030000 ERROR: xxxx error:fa020000

    A:該錯誤表明未找到“授權記錄”或“拒絕訪問”,其原因是未完成高危操作的授權。進行高危操作的BCL授權,請參見明文和密文轉換BCL授權