【问题标题】:Does MySQL apply Encryption for Data at Rest by default?MySQL 默认情况下是否对静态数据应用加密?
【发布时间】:2021-07-06 14:24:39
【问题描述】:
我通过this page of MySQL Doc 。我仍然不清楚存储在文件系统(主要是 .ibd 文件)中的数据是否默认加密或不用于 MySQL v8.0.x?我看到一堆关于表空间的信息说明:
mysql系统表空间包含mysql系统数据库和MySQL数据字典表。默认不加密。
是不是也意味着存储的数据默认不加密?有人可以帮我指出官方文档是这样说的吗?
【问题讨论】:
标签:
mysql
encryption
mysql-8.0
【解决方案1】:
是的,默认情况下数据是未加密的。
在 MySQL 8.0.16 之前,您必须显式设置加密以启用它,请参见例如对于File-Per-Table Tablespace Encryption:
在 MySQL 8.0.16 之前,必须指定 ENCRYPTION 子句才能启用加密。
这当然意味着如果你不指定它,它默认是禁用的。
自 MySQL 8.0.16 起,行为is inherited:
从 MySQL 8.0.16 开始,default_table_encryption 系统变量定义了模式和通用表空间的默认加密设置。当未明确指定 ENCRYPTION 子句时,CREATE TABLESPACE 和 CREATE SCHEMA 操作应用 default_table_encryption 设置。
默认情况下,表会继承其创建所在的架构或通用表空间的加密设置。例如,在启用加密的架构中创建的表默认是加密的。这种行为使 DBA 能够通过定义和强制实施模式和通用表空间加密默认值来控制表加密的使用。
但default_table_encryption 的默认值为off:
默认值关闭
定义在创建模式和通用表空间时应用的默认加密设置而不指定 ENCRYPTION 子句。
default_table_encryption 变量仅适用于用户创建的模式和通用表空间。它不管理 mysql 系统表空间的加密。
请注意,如果您更改默认值,现有对象将不会自动加密,您必须明确更改它们。