すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:平文と暗号文の間でデータを変換する

最終更新日:Oct 31, 2024

ApsaraDB RDS for PostgreSQLインスタンスで常に機密データベース機能が有効になっている場合、列内のデータを平文と暗号文の間で変換できます。

前提条件

構文

ALTER TABLE <table_name> 
    ALTER COLUMN <column_name> [SET DATA] TYPE <Data type after conversion> 
    USING <Data conversion function>(<column_name>[, <keyname>]);
説明
  • データを暗号文から平文に変換する場合は、column_nameパラメーターのみを設定する必要があります。

  • データを平文から暗号文に変換する場合は、column_nameパラメーターのみを設定できます。 column_nameパラメーターとkeynameパラメーターを同時に設定することもできます。

表1データ変換関数

平文データ

暗号文データ

平文から暗号文への変換関数

暗号化テキストから平文への変換関数

int4

enc_int4

encdb.enc_int4_encrypt

encdb.de crypt

int8

enc_int8

encdb.enc_int8_encrypt

encdb.de crypt

float4

enc_float4

encdb.enc_float4_encrypt

encdb.de crypt

float8

enc_float8

encdb.enc_float8_encrypt

encdb.de crypt

numeric

enc_decimal

encdb.enc_decimal_encrypt

encdb.de crypt

text

enc_text

encdb.enc_text_encrypt

encdb.de crypt

timestamp

enc_timestamp

encdb.enc_timestamp_encrypt

encdb.de crypt

  • 構築されたキー名のキーを使用して、列内のデータを平文から暗号文に変換します。

    1. キー名を作成します。

      SELECT encdb.keyname_generate('<user_name>', '<database_name>', '<schema_name>', '<table_name>', '<column_name>');
    2. keynameのキーを生成します。

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

      encdb.de k_generatejson_paramsパラメーターはオプションです。 このパラメーターにはJSON形式の値を指定できます。 次の表に、サポートされているキーと値のペアを示します。

      キー

      アルゴリズム

      暗号化アルゴリズム。

      デフォルト値: AES_128_GCM。

      policy

      DEFAULT

      暗号化ポリシーです。 パラメーターは予約されています。 値はDEFAULTとして固定されています。

      フラグ

      • RND

      • DET

      暗号化方法。 有効な値:

      • RND: ランダム暗号化

      • DET: 決定論的暗号化

      デフォルト値: RND

      mekid

      ユーザーのマスター暗号化キー (MEK) ID

      データ暗号化キー (DEK) の生成に使用されるMEKのID。

      デフォルト値は、現在のユーザーのMEK 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>');
  • 現在のデータベースのデフォルトキーを使用して、列のデータを平文から暗号文に変換します。

    説明

    現在のデータベースで使用されているデフォルトキーのキー名は、|<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>');

よくある質問

  • ERROR: xxxx generate dek for keyname errno:f70a0000エラーが報告された場合はどうすればよいですか?

    このエラーは、クライアントがEncDB SDKを使用してデータベースに接続されていない場合に報告されます。 この場合、少なくとも1回はEncDB SDKを使用してクライアントとデータベース間の接続を確立します。 詳細については、「クライアントから常に機密データベース機能を使用する」をご参照ください。

  • ERROR: xxxx errno:fa030000またはERROR: xxxx error:fa020000エラーが報告された場合はどうすればよいですか?

    このエラーは、アカウントの認証レコードが見つからない場合、またはアカウントに危険な操作を実行する権限がない場合に報告されます。 この場合、BCLを使用してアカウントに権限を付与します。