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