启用二进制日志加密后,您可以在服务器运行时随时通过发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY
轮换二进制日志主密钥。 当使用此语句手动轮换二进制日志主密钥时,新文件和后续文件的密码使用新的二进制日志主密钥加密,并且现有加密二进制日志文件和中继日志文件的密码也使用新的二进制日志主密钥重新加密,因此加密会完全更新。 您可以定期轮换二进制日志主密钥以符合组织的安全策略,并且如果您怀疑当前或任何以前的二进制日志主密钥可能已被泄露。
当您手动轮换二进制日志主密钥时,MySQL 服务器会按顺序执行以下操作
使用下一个可用的序列号生成一个新的二进制日志加密密钥,将其存储在密钥环中,并将其用作新的二进制日志主密钥。
在所有通道上轮换二进制日志和中继日志文件。
新的二进制日志主密钥用于加密新二进制日志和中继日志文件以及后续文件的密码,直到密钥再次更改。
服务器上现有加密二进制日志文件和中继日志文件的密码会使用新的二进制日志主密钥依次重新加密,从最新的文件开始。 任何未加密的文件都会被跳过。
重新加密过程完成后,不再用于任何文件的二进制日志加密密钥会从密钥环中删除。
需要 BINLOG_ENCRYPTION_ADMIN
权限才能发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY
,并且如果 binlog_encryption
系统变量设置为 OFF
,则无法使用此语句。
作为二进制日志主密钥轮换过程的最后一步,不再应用于任何保留的二进制日志文件或中继日志文件的二进制日志加密密钥会从密钥环中清理。 如果保留的二进制日志文件或中继日志文件无法初始化以重新加密,则相关二进制日志加密密钥不会被删除,以防将来可以恢复文件。 例如,如果二进制日志索引文件中列出的文件当前不可读,或者某个通道无法初始化,则可能会发生这种情况。 如果服务器 UUID 发生更改(例如,因为使用 MySQL 企业版备份创建的备份用于设置新副本),则在新服务器上发出 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 事件调度程序,并使用 CREATE EVENT
语句发出 ALTER INSTANCE ROTATE BINLOG MASTER KEY
语句。如果您怀疑当前或任何以前的二进制日志主密钥可能已被泄露,则需要在每个适用的源服务器和副本服务器上发出该语句。在各个服务器上发出该语句可确保您能够验证即时合规性,即使是在副本滞后、属于多个复制拓扑或当前不在复制拓扑中但具有二进制日志和中继日志文件的情况下。
系统变量 binlog_rotate_encryption_master_key_at_startup
控制服务器重新启动时是否自动轮换二进制日志主密钥。如果该系统变量设置为 ON
,则每当服务器重新启动时,都会生成一个新的二进制日志加密密钥并将其用作新的二进制日志主密钥。如果设置为 OFF
(默认值),则重新启动后将再次使用现有的二进制日志主密钥。当二进制日志主密钥在启动时轮换时,新的二进制日志和中继日志文件的文件密码将使用新密钥加密。现有加密的二进制日志文件和中继日志文件的文件密码不会重新加密,因此它们将使用旧密钥加密,该旧密钥仍可在密钥环上使用。