常に機密性の高いデータベースクラスターを使用する場合、列の種類を平文と暗号文の間で変換できます。
前提条件
常に機密データベース機能が有効になり、PolarDBインスタンスに対して設定されます。 詳細については、「常に機密のデータベース機能の有効化」、「機密データの定義」、および「クライアントから常に機密のデータベース機能を使用する」をご参照ください。
PolarDB for Oracleクラスターのマイナーバージョンが 2.0.14.14.0以降であることを確認します。
動作制御リスト (BCL) を使用して許可されます。 詳細については、「マルチユーザーデータへのアクセス権限の付与」をご参照ください。
構文
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 |
例
構築されたキー名のキーを使用して、列内のデータを平文から暗号文に変換します。
キー名を作成します。
SELECT encdb.keyname_generate(<user_name> 、<database_name> 、<schema_name> 、<table_name> 、<column_name>);
keynameのキーを生成します。
SELECT encdb.de k_generate(<keyname>[, <json_params>]);
encdb.de k_generate
のjson_params
パラメーターはオプションです。 このパラメーターにはJSON形式の値を指定できます。 次の表に、サポートされているキーと値のペアを示します。キー
例
説明
algorithm
AES_128_GCM
AES_128_ECB
AES_128_CTR
AES_128_CBC
SM4_128_CBC
SM4_128_ECB
SM4_128_CTR
CLWW_ORE
説明注文を明らかにする暗号化 (ORE) が実装され、最適化される。 詳細については、「実用的な注文-限られた漏れによる暗号化の公開」をご参照ください。
暗号化アルゴリズム。
デフォルト値: AES_128_GCM。
policy
DEFAULT
暗号化ポリシーです。 パラメーターは予約されています。 値はDEFAULTとして固定されています。
flags
RND
DET
暗号化方法。 有効な値:
RND: ランダム暗号化
DET: 決定論的暗号化
デフォルト値: RND
mekid
ユーザーのマスター暗号化キー (MEK) ID
データ暗号化キー (DEK) の生成に使用されるMEKのID。
デフォルト値は、現在のユーザーのMEK IDです。
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>);