「テーブルの暗号化をデフォルトで有効にするオプションかな?」と思って、CREATE TABLEしてみるも変わらず・・・
マニュアル見ると、データベースとテーブルスペースに効くと書いてありました・・・。名前が紛らわしい・・・。
Defines the default encryption setting applied to schemas and general tablespaces when they are created without specifying an ENCRYPTION
clause.
このパラメータを有効化した状態で、ENCRYPTIONオプションを省略してCREATE DATABASEすると、ENCRYPTION='Y'が暗黙的に追加されます。
mysql> SHOW VARIABLES LIKE 'default_table_encryption';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| default_table_encryption | ON |
+--------------------------+-------+
1 row in set (0.00 sec)
mysql> CREATE DATABASE tde;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE DATABASE tde;
+----------+-------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------------------------------------------------------------------+
| tde | CREATE DATABASE `tde` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='Y' */ |
+----------+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
テーブルのENCRYPTION指定を省略した場合は、データベースのENCRYPTIONに従う仕様です。結果として、テーブルの暗号化をデフォルトとすることができます。
mysql> CREATE TABLE tde.test (pk SERIAL PRIMARY KEY, c1 VARCHAR(255));
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW CREATE TABLE tde.test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`pk` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`c1` varchar(255) DEFAULT NULL,
PRIMARY KEY (`pk`),
UNIQUE KEY `pk` (`pk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ENCRYPTION='Y'
1 row in set (0.00 sec)
default_table_encryption パラメータはENCRYPTION指定を省略した場合の挙動を変更します。明示的にENCRYPTION='N'を指定すれば、暗号化しないテーブルを作成できます。暗号化を強制する機能ではありません。
とはいえ、暗号化をし忘れた(ENCRYPTIONを指定してなかった)というケースが防げるだけでも、十分有用だと思います。
暗号化を強制したい場合は、table_encryption_privilege_check という別のパラメータが関連してきます。
つづく。。。