TDEが追加されたEDB Postgres Advanced Server 15

2023年2月14日にEDB Postgres Advanced Server 15がリリースされました。

今回のリリースではTDEと呼ばれる透過型暗号化機能が追加されて、セキュリティ機能がより強固になりました。特にPostgreSQLデータベースにおいて透過型暗号化の機能は利用できるソリューションが限られていたため、EDB社によるTDEの実装はリリースが待たれていた機能になります。

EDB Postgres Advanced Server 15はコミュニティが公開しているPostgreSQL 15をデータベースコアに使用しているため、PostgreSQL 15より搭載された以下のようなアップデートも取り込まれています。

PostgreSQL 15 に含まれる主な新機能と拡張機能

  • 新たなSQLコマンドのサポート(MERGE)
  • 列リストと行フィルター条件を指定する機能による、論理レプリケーションパブリケーション内のテーブルの内容の選択的なパブリケーション。
  • Zstandard (zstd) 圧縮のサポートを含む、圧縮のためのより多くのオプションが追加されます。
    これには、 pg_basebackup中にサーバー側で圧縮を実行するためのサポートが含まれます。
  • JSON形式を使用した構造化されたサーバーログ出力のサポート。
  • 特にメモリ内およびディスク上の並べ替えのパフォーマンスが向上しました。

EDB Postgres Advanced Server 15 リリースノートよりTDE機能の追加について

EDB Postgres Advanced Server 15のRelease Noteでは、機能拡張として透過型暗号化(Transparent Data Encryption, TDE)の追加を大きなトピックスとして取り上げています。

TDEは、データベースシステムに保存されているすべてのユーザー データを暗号化します。この暗号化は、ユーザーに対して透過的に利用できます。 ユーザーデータには、テーブルやその他のオブジェクトに格納されている実際のデータとオブジェクトの名前などのシステムカタログデータが含まれます。

TDEで暗号化できるのは以下の項目になります。

  • テーブル、シーケンス、インデックスの基礎となるファイル。TOASTテーブルとシステムカタログを含み、すべてのフォークを含みます。これらのファイルはデータファイルと呼ばれます。
  • 先行書き込みログ (WAL)。
  • クエリ処理およびデータベース システム操作中に使用されるさまざまな一時ファイル。

以下は、TDE によって暗号化されません。

  • トランザクションステータス (pg_subtrans や pg_xact など) などのユーザーデータを含まない、オペレーティング データベースシステム内部のメタデータ。
  • データ ディレクトリ内のファイル名とファイル システム構造。つまり、データベース システムの全体的なサイズ、データベースの数、テーブルの数、それらの相対的なサイズ、および最終アクセス時間などのファイル システム メタデータはすべて、復号化せずに表示されます。
  • 外部テーブルのデータ。
  • サーバー診断ログ。
  • 構成ファイル。

透過型暗号化(Transparent Data Encryption, TDE)とは、データベース内のデータを暗号化するプロセスです。この技術は、機密情報を扱うデータベースにおいてセキュリティを向上させることを目的としています。透過型暗号化を使用すると、データベースファイルやバックアップファイル、ログファイルなど、保存されているデータが暗号化されます。

透過型暗号化の主な特徴は、データベースへのアクセスや操作に対して透過的であることです。つまり、アプリケーションやユーザーはデータの暗号化や復号化を意識せずにデータベースを利用できます。暗号化および復号化処理は、データベース管理システム(DBMS)によって自動的に行われるため、アプリケーションコードの変更や追加機能の実装が不要です。

データベースの透過型暗号化は、データが保存される際に暗号化され、正当なユーザーやアプリケーションがアクセスする際に自動的に復号化されます。これにより、不正なユーザーや攻撃者が直接データベースファイルにアクセスした場合でも、データは暗号化されており、情報漏えいのリスクを軽減できます。

しかし、透過型暗号化はデータベース内のデータに対してのみセキュリティを提供するため、アプリケーションやネットワークレベルのセキュリティ対策も併用することが重要です。

詳細については、TDEドキュメントを参照してください。

TDEドキュメント
https://www.enterprisedb.com/docs/tde/latest/

EDB Postgres Advanced Server 15 リリースノート
https://www.enterprisedb.com/docs/epas/latest/epas_rel_notes/

リリースノートよりアップデート内容を抜粋

TypeDescription
Upstream mergeMerged with community PostgreSQL 15.2. See the PostgreSQL 15 Release Notes for more information.
FeatureTransparent Data Encryption (TDE) encrypts any user data stored in the database system. This encryption is transparent to the user. User data includes the actual data stored in tables and other objects, as well as system catalog data such as the names of objects. See TDE docs for more information.
EnhancementEDB Postgres Advanced Server now allows non-superusers to load data using EDB*Loader.
EnhancementEnabled multi-insert support for the dynamic partition for EDB*Loader and COPY command.
EnhancementEDB Postgres Advanced Server now lets you obfuscate the LDAP password in the pg_hba.conf file. You can supply a module that transforms the ldapbindpasswd value in the pg_hba.conf file before the value is passed to the LDAP server. See Obfuscating the LDAP password.
EnhancementAdded OCI dblink configuration file approach to restrict pushdowns. This enhancement adds the infrastructure to the configuration file in which you can define the list of operators and functions that can push down to the remote server. It also allows you to add to or modify the list as needed.
EnhancementAdded support for WHERE clause to the UPDATE and INSERT of MERGE command for Oracle compatibility.
EnhancementAdded the HTP and HTF packages to built-in packages for Oracle compatibility.
EnhancementThe INTO clause now accepts multiple composite-row type targets in SPL. This enhancement allows you to assign a SELECT list having a mix of scalar and composite type values that are fetched from a table to corresponding scalar or composite variables (including collection variables) in the SPL code.
EnhancementEDB Postgres Advanced Server now skips IN/OUT/IN OUT modifiers in the USING expression. A USING clause in EXECUTE IMMEDIATE supports passing parameters to embedded SPL blocks. However, these parameters are treated as IN OUT only, and there was previously no way to specify whether the parameter is IN, OUT, or IN OUT. To ease migration from Oracle, these modifiers are now skipped at the beginning of the expression whenever possible.
EnhancementAdded the FORMAT_ERROR_STACK() and FORMAT_ERROR_BACKTRACE() functions to the DBMS_UTILITY package. These functions are used in a stored procedure, function, or package to return the current exception name. These functions are useful for debugging and logging purposes.
EnhancementAdded Oracle-compatible UPDATE..SET ROW syntax support. UPDATE changes the values of the specified columns in all rows that satisfy the condition. Only the columns being modify are mentioned in the SET clause. Columns not being modified explicitly retain their previous values. The SET ROW clause enables you to update a target record using a record-type variable or row-type objects. The record or row used must have compatible data types with table’s columns in order.
EnhancementEDB Postgres Advanced Server now provides INDEX and NO_INDEX hints for the partitioned table. The optimizer hints apply to the inherited index in the partitioned table. The execution plan internally expands to include the corresponding inherited child indexes and applies them in later processing.
EnhancementAdded the SQLCODE() and SQLERRM()functions. In an exception handler, the SQLCODE function returns the numeric code of the exception being handled. Outside an exception handler, SQLCODE returns 0. The SQLERRM function returns the error message associated with an SQLCODE variable value. If the error code value is passed to the SQLERRM function, it returns an error message associated with the passed error code value, regardless of the current error raised.
EnhancementAdded the TO_MULTI_BYTE() and TO_SINGLE_BYTE() functions.
EnhancementAdded the TO_NCHAR()function, the wrapper function that casts input to NVARCHAR2. The size of the input is limited to the PostgreSQL supported size limit for that type.
EnhancementAdded the TO_DSINTERVAL() function. Converts a character string of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 data type to an interval data type.
EnhancementAdded the FROM_TZ() function. Converts a TIMESTAMP value and a time zone value to an equivalent TIMESTAMP WITH TIME ZONE value.
EnhancementAdding TO_CLOB() and TO_BLOB() functions. These are the only wrapper functions that cast input to CLOB or BLOB types respectively.
EnhancementYou can now view the package specification and package body definition using the psql meta-commands \sps and \spb, respectively.
Enhancementindex _advisor is now a separate extension, but continues to be packaged with EDB Postgres Advanced Server.
Enhancementsql_profiler is now a separate extension and is no longer packaged with EDB Postgres Advanced Server.
ChangeThe Windows installer no longer installs pgAdmin, and the parallel-clone and clonescheme extensions are no longer included in an EDB Postgres Advanced Server installation. To download pgAdmin, see the pgAdmin download page.