对于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 8.0.31 开始,可以使用该版本中添加的 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) 值。
数据加密密钥值(DEK 0 , ..., DEK n)用于加密每个文件中数据的[子集]。
密码间接加密包含随机 NMK 的机密文件,该随机 NMK 加密节点上每个加密文件的部分标头。加密文件头包含用于该文件中数据的随机数据密钥。
加密由
NDBFS
数据节点内的层透明地实现。NDBFS
内部客户端块正常操作其文件;NDBFS
使用支持加密的额外页眉和页脚信息包装物理文件,并在读取和写入文件时加密和解密数据。包装的文件格式称为ndbxfrm1
.
节点密码经过PBKDF2和随机salt加密secrets文件,其中包含随机生成的NMK,用于加密每个加密文件中随机生成的数据加密密钥。
加密和解密的工作是在 NDBFS I/O 线程中执行的(而不是在 main、tc、ldm 或 rep 等信号执行线程中)。这类似于压缩 LCP 和压缩备份所发生的情况,通常会导致 I/O 线程 CPU 使用率增加;您可能希望
ThreadConfig
针对 I/O 线程进行调整(如果正在使用)。