文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  NDB 文件系统加密实现

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(如果使用)。