Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  NDB File System Encryption Implementation

25.6.14.2 NDB 文件系统加密实现

对于 NDB 透明数据加密(TDE),数据节点在静态状态下加密用户数据,以密码(文件系统密码)为安全保障,该密码用于加密和解密每个数据节点上的秘密文件。秘密文件包含节点主密钥(NMK),该密钥用于后续加密不同文件类型以实现持久性。 NDB TDE 加密用户数据文件,包括 LCP 文件、重做日志文件、表空间文件和撤销日志文件。

您可以使用 ndbxfrm 实用程序来查看文件是否加密,如下所示:

> ndbxfrm -i ndb_5_fs/LCP/0/T2F0.Data
File=ndb_5_fs/LCP/0/T2F0.Data, compression=no, encryption=yes
> ndbxfrm -i ndb_6_fs/LCP/0/T2F0.Data
File=ndb_6_fs/LCP/0/T2F0.Data, compression=no, encryption=no

可以使用 ndb_secretsfile_reader 程序从秘密文件中获取密钥,如下所示:

> ndb_secretsfile_reader --filesystem-password=54kl14 ndb_5_fs/D1/NDBCNTR/S0.sysfile
ndb_secretsfile_reader: [Warning] Using a password on the command line interface can be insecure.
cac256e18b2ddf6b5ef82d99a72f18e864b78453cc7fa40bfaf0c40b91122d18

每个节点的密钥层次结构可以表示如下:

  • 用户提供的密码短语(P)经过密钥衍生函数处理,使用随机盐值生成唯一的密码密钥(PK)。

  • 每个节点上的唯一密钥(PK)加密该节点上的秘密文件中的数据。

  • 秘密文件包含一个唯一的、随机生成的节点主密钥(NMK)。

  • NMK 加密(使用包装)每个加密文件(包括 LCP 和 TS 文件、重做日志和撤销日志)的头部中的一个或多个随机生成的数据加密密钥(DEK)值。

  • 数据加密密钥值(DEK0、...、DEKn)用于加密每个文件中的数据子集。

密码间接加密秘密文件,包含随机生成的 NMK,该密钥加密每个加密文件的头部中的随机数据密钥。

加密是由 NDBFS 层在数据节点中实现的。 NDBFS 内部客户端块对文件进行正常操作; NDBFS 将物理文件与额外的头部和脚部信息一起包装,以支持加密,并在读取和写入文件时加密和解密数据。包装文件格式称为 ndbxfrm1

节点密码经过 PBKDF2 和随机盐值处理,以加密秘密文件,该文件包含随机生成的 NMK,该密钥用于加密每个加密文件中的随机生成的数据加密密钥。

加密和解密的工作是在 NDBFS I/O 线程(而不是在信号执行线程,如 main、tc、ldm 或 rep 中)中执行的。这类似于压缩 LCP 和压缩备份的情况,通常会增加 I/O 线程的 CPU 使用率;您可能需要根据 I/O 线程调整 ThreadConfig(如果使用)。