17.3.2.3 二进制日志主密钥轮换

启用二进制日志加密后,您可以在服务器运行时随时通过发出ALTER INSTANCE ROTATE BINLOG MASTER KEY. 当使用此语句手动轮换二进制日志主密钥时,新文件和后续文件的密码将使用新的二进制日志主密钥加密,并且现有加密二进制日志文件和中继日志文件的文件密码将重新加密使用新的二进制日志主密钥,因此加密已完全更新。您可以定期轮换二进制日志主密钥以符合您组织的安全策略,并且如果您怀疑当前或任何以前的二进制日志主密钥可能已被泄露。

当您手动轮换二进制日志主密钥时,MySQL Server 会依次执行以下操作:

  1. 使用下一个可用序列号生成一个新的二进制日志加密密钥,存储在密钥环上,并用作新的二进制日志主密钥。

  2. 二进制日志和中继日志文件在所有通道上轮换。

  3. 新的二进制日志主密钥用于加密新二进制日志和中继日志文件的文件密码,以及后续文件,直到密钥再次更改。

  4. 服务器上现有的加密二进制日志文件和中继日志文件的文件密码将使用新的二进制日志主密钥依次重新加密,从最近的文件开始。将跳过任何未加密的文件。

  5. 从密钥环中删除重新加密过程后不再用于任何文件的二进制日志加密密钥。

BINLOG_ENCRYPTION_ADMIN 需要权限才能发出,如果系统变量设置为ALTER INSTANCE ROTATE BINLOG MASTER KEY则不能使用该 语句。 binlog_encryptionOFF

作为二进制日志主密钥轮换过程的最后一步,所有不再适用于任何保留的二进制日志文件或中继日志文件的二进制日志加密密钥都会从密钥环中清除。如果保留的二进制日志文件或中继日志文件无法初始化重新加密,则不会删除相关的二进制日志加密密钥,以备将来恢复文件。例如,如果二进制日志索引文件中列出的文件当前不可读,或者通道无法初始化,则可能会出现这种情况。如果服务器 UUID 更改,例如因为使用 MySQL Enterprise Backup 创建的备份用于设置新副本,则发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY在新服务器上不会删除任何包含原始服务器 UUID 的早期二进制日志加密密钥。

如果二进制日志主密钥轮换过程的前四个步骤中的任何一个无法正确完成,则会发出一条错误消息,解释二进制日志文件和中继日志文件的加密状态的情况和后果。之前加密的文件始终处于加密状态,但它们的文件密码可能仍使用旧的二进制日志主密钥进行加密。如果您看到这些错误,请首先通过再次发出来重试该过程 ALTER INSTANCE ROTATE BINLOG MASTER KEY。然后调查单个文件的状态以查看是什么阻止了进程,尤其是当您怀疑当前或任何以前的二进制日志主密钥可能已被泄露时。

如果二进制日志主密钥轮换过程的最后一步无法正确完成,则会发出一条警告消息来解释这种情况。警告消息表明进程是否无法清除密钥环中用于轮换二进制日志主密钥的辅助密钥,或者是否无法清除未使用的二进制日志加密密钥。您可以选择忽略该消息,因为这些键是辅助键或不再使用,或者您可以ALTER INSTANCE ROTATE BINLOG MASTER KEY再次发出以重试该过程。

ON如果服务器在二进制日志主密钥轮换过程中 停止并重新启动时二进制日志加密仍然设置为,则重新启动后新的二进制日志文件和中继日志文件将使用新的二进制日志主密钥加密。但是,不会继续对现有文件进行重新加密,因此在服务器停止之前未重新加密的文件将使用先前的二进制日志主密钥进行加密。要完成重新加密并清理未使用的二进制日志加密密钥,ALTER INSTANCE ROTATE BINLOG MASTER KEY请在重新启动后再次发出。

ALTER INSTANCE ROTATE BINLOG MASTER KEY操作不会写入二进制日志,也不会在副本上执行。因此,二进制日志主密钥轮换可以在包括 MySQL 版本混合的复制环境中执行。要在所有适用的源服务器和副本服务器上安排二进制日志主密钥的定期轮换,您可以在每个服务器上启用 MySQL 事件调度程序并ALTER INSTANCE ROTATE BINLOG MASTER KEY使用 CREATE EVENT陈述。如果因为怀疑当前或任何以前的二进制日志主密钥可能已被泄露而轮换二进制日志主密钥,请在每个适用的源服务器和副本服务器上发出该语句。在单个服务器上发出声明可确保您可以立即验证合规性,即使在副本滞后、属于多个复制拓扑或当前在复制拓扑中不活动但具有二进制日志和中继日志文件的情况下也是如此。

系统 binlog_rotate_encryption_master_key_at_startup 变量控制二进制日志主密钥是否在服务器重启时自动轮换。如果此系统变量设置为ON,则每当服务器重新启动时,都会生成一个新的二进制日志加密密钥并将其用作新的二进制日志主密钥。如果设置为 OFF,这是默认值,重启后会再次使用现有的二进制日志主密钥。当二进制日志主密钥在启动时轮换时,新二进制日志和中继日志文件的文件密码将使用新密钥加密。现有加密二进制日志文件和中继日志文件的文件密码未重新加密,因此它们使用旧密钥保持加密状态,该密钥在密钥环上仍然可用。