【发布时间】:2016-02-22 10:06:21
【问题描述】:
我已经在 MariaDB 上设置了table-level InnoDB database encryption。
我想知道是否有任何方法可以确认数据是否真正加密。我尝试在 /var/lib/mysql/ibdata1 中搜索表格中的示例数据,但我不知道这是否是一个可靠的测试。
【问题讨论】:
标签: encryption innodb mariadb
我已经在 MariaDB 上设置了table-level InnoDB database encryption。
我想知道是否有任何方法可以确认数据是否真正加密。我尝试在 /var/lib/mysql/ibdata1 中搜索表格中的示例数据,但我不知道这是否是一个可靠的测试。
【问题讨论】:
标签: encryption innodb mariadb
我的测试建议是将完整的数据集复制到另一个没有加密密钥的节点,然后尝试启动 MySQL 并查询加密的表。我正在做一个(大)假设,因为缺少有效的加密密钥,它们将不可读。
解析磁盘上的文件可能会很困难,除非您有专门的工具来执行此操作。也许像 Jeremy Cole 的 innodb_ruby 这样的东西会是另一个试金石https://github.com/jeremycole/innodb_ruby。
【讨论】:
我在 mariadb.com 上发布了这个问题,并建议对一些已知数据执行 grep。
Rackspace 的一位 DBA 建议改用 strings 命令,以更好地处理二进制数据,例如:
strings /var/lib/mysql/sample_table/user.ibd | grep "knownuser"
这种方法在加密表上不返回结果,但在未加密表上返回结果(假设两者都加载了“knownuser”)。
【讨论】:
[如果您更改加密日志的密钥,可能不起作用。]
更改密钥文件中的密钥。 (不要删除 - 它仍然必须保持有效密钥,否则服务器无法重新启动)
再次启动 MariaDB。
如果加密正确,则在尝试读取加密表时会出现答案:“表已加密...”。
【讨论】:
您可以查询information_schema.innodb_tablespaces_encryption。当 innodb 表空间被加密时,它就存在于表中。
SELECT * FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE NAME LIKE 'db_encrypt%';
【讨论】:
SELECT * FROM information_schema.INNODB_TABLESPACES_ENCRYPTION,所有加密表都列在此处。