作者:Gopal Shankar 译:徐轶韬

MySQL 5.7.11引入了InnoDB表空间加密,该加密启用了对每表文件表空间的支持,此博客中将讨论此功能。

在MySQL 8.0.13中,引入了通用表空间的加密。

为了提高加密处理的可用性,MySQL 8.0.16添加了几个功能,对模式,通用表空间或整个MySQL系统中的表启用,禁用和强制执行表加密。这些功能允许数据库管理员进行更精细的控制。以下各节通过示例讨论其中一些功能

1.加密发生在表空间级别

MySQL通过加密文件系统块,对表在存储级别进行加密。表空间不能混合使用加密和未加密的块。因此,表空间是未加密的或已加密的。MySQL对用户表支持两种类型的表空间。缺省值为file-per-table,每个表存储在单独的表空间中。第二种类型是通用表空间,可以在一个表空间中存储多个表。因此,通用表空间不能同时包含未加密表和已加密表。在MySQL系统中,可以在多个级别上控制加密。加密发生在存储层。

用例1:我希望对系统中的所有表进行加密

我希望对系统中的所有表进行加密。这可以通过系统范围的配置设置default_table_encryption轻松实现。如果配置default_table_encryption ='y',所有新表都将被加密。在上图中,将在系统级别进行配置。有关如何检查的信息,请参见第2节。用例2:我希望对模式中的所有表进行加密

我有一个模式,希望对模式中所有表进行加密。创建模式时,可以设置默认的加密属性。之后在模式中创建的所有表都将继承该模式的默认加密设置。从上图可以看出,如果为“ db1”配置了加密,则所有表都将对“file-per-table”表空间(例如“ ts1”)和通用表空间(例如“ ts2”)进行加密。有关更多详细信息,请参见第3和第4节。用例3:我有一个通用表空间,并希望对其进行加密

我正在使用通用表空间,并且希望对表空间中的所有表进行加密。我们知道,通用表空间只能保存已加密或未加密的表。查看上图,我们希望对“ ts2”进行加密。因此,我们创建表空间并将其配置为加密。然后将创建模式“ db1”中的表“ t2”,并将其存储在“ ts2”中,因为已使用默认加密创建了“ db1”。在'db2'中创建'ts1'时,必须使用加密语句创建将存储在'ts2'中的表。有关更多详细信息,请参见第4节。用例4:我想阻止覆盖默认加密设置

有一些子句可以覆盖默认的加密设置。我想禁止这种行为。从上图可以看出,'db1'设置了默认加密,'db2'未设置默认加密,并且'ts2'被创建为加密表空间,我想禁止在“ ts2”中创建一个来自'db2'的't1'。我们可以通过配置设置table_encryption_privilege_check= true来实现这一点,它将要求服务器禁止覆盖加密设置。具有TABLE_ENCRYPTION_ADMIN权限的用户始终可以覆盖任何检查。有关更多详细信息,请参见第5节。

2. MySQL系统范围内的默认加密

MySQL 8.0.16提供了一个服务器系统变量default_table_encryption,在服务器启动时默认将其设置为“ n”。创建模式或通用表空间将继承此设置。例如,使用—default_table_encryption= true

通过此变量,可以在MySQL系统范围内创建加密表。当然,我们可以通过显式设置加密类型来覆盖继承设置,如下面的第3和4节所示。

注意:拥有SYSTEM_VARIABLES_ADMIN和TABLE_ENCRYPTION_ADMIN权限或SUPER权限的用户可以在运行时更改变量“ default_table_encryption”设置。

3.模式范围的加密默认值

创建或更改模式时,使用MySQL 8.0.16中引入的新的DEFAULT ENCRYPTION子句为模式设置默认的加密。例如:

在模式“ db1”下创建的任何表都将继承模式DEFAULT ENCRYPTION子句设置。

例如:

]我们可以通过在CREATE语句中显式设置默认表ENCRYPTION来覆盖它。尝试在使用DEFAULT ENCRYPTION ='Y'的模式下创建未加密表将生成警告。例如:

让我们假设我们已将模式'db1'与DEFAULT ENCRYPTION设置为'Y',并且我们想使用'db1'中的通用表空间创建一个表。MySQL希望用户使用加密的通用表空间。例如:

通过在CREATE TABLE中显式提供ENCRYPTION子句,可以使用未加密的通用表空间创建表。这将产生警告。例如:

5.强制表加密

上面您可能已经注意到,通过在创建表时为模式和ENCRYPTION子句明确提供DEFAULT ENCRYPTION子句,我们允许覆盖默认的加密设置。但是,某些用户/管理员希望严格执行加密以避免覆盖默认设置。MySQL 8.0.16提供了一个名为table_encryption_privilege_check的新服务器系统变量,可用于实施默认的加密设置。

MySQL的8.0.16提供了一个名为TABLE_ENCRYPTION_ADMIN的新权限,当用户启用table_encryption_privilege_check覆盖默认的加密设置时,需要使用该权限。

拥有SUPER权限的用户可以在运行时更改变量'table_encryption_privilege_check'。

让我们假设服务器使用—table_encryption_privilege_check= true和—default_table_encryption= true启动。并且未授予用户TABLE_ENCRYPTION_ADMIN权限。

a)尝试使用DEFAULT ENCRYPTION ='N'创建模式将引发错误。

b)尝试创建一个加密类型与模式加密不匹配的表也将导致类似的错误。例如:

c)尝试使用ENCRYPTION ='N'创建通用表空间将引发错误。

使用—table_encryption_privilege_check= true和—default_table_encryption= false,我们将看到强制实施禁止MySQL中的加密表。例如,如果用户尝试使用DEFAULT ENCRYPTION ='Y'创建数据库或使用ENCRYPTION ='Y'创建表,则命令将失败,并显示相应的错误消息。拥有TABLE_ENCRYPTION_ADMIN权限的用户将能够执行上面的语句。

关于加密控制的内容到此为止!请参考以下文档以获取更多信息。

https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-additions

https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_table_encryption

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_table_encryption_privilege_check

https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_table-encryption-admin

https://dev.mysql.com/doc/refman/8.0/en/create-database.html

https://dev.mysql.com/doc/refman/8.0/en/alter-database.html

https://dev.mysql.com/doc/refman/8.0/en/create-tablespace.html

https://dev.mysql.com/doc/refman/8.0/en/alter-tablespace.html

https://dev.mysql.com/doc/refman/8.0/en/create-table.html

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

https://dev.mysql.com/doc/refman/8.0/en/schemata-table.html

https://dev.mysql.com/doc/refman/8.0/en/tables-table.html

感谢您使用MySQL!

欢迎关注个人公众号“MySQL解决方案工程师”

mysql 加密 en_MySQL8.0 的表空间文件加密控制相关推荐

  1. mysql 5.7 innodb 预热_mysql5.7 InnoDB数据表空间文件平滑迁移

    [ERROR] [FATAL] InnoDB: Tablespace id is 14 in the data dictionary but in file ./mysql/innodb_index_ ...

  2. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  3. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结

    mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...

  4. Mysql ——区、段、表空间 、碎片区

    目录 1.页的上层结构 2.区.段 与碎片区 2.1.为什么要有区? 2.2 为什么要有段? 2.3 为什么要有碎片区? 2.4 区的分类 3.表空间 3.1 独立表空间 3.2 系统表空间 附录:数 ...

  5. undo表空间文件丢失恢复(4)--无备份无recover的情况下恢复

    undo表空间的数据文件丢失,如果没有备份的情况下,而且丢失的undo文件可以置为offline状态后(注意是offline不是recover状态),则可以如下恢复,下边给出一个例子. undo表空间 ...

  6. Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看

    Oracle 数据库表空间 第一章:表空间的拓展 ① 查看剩余表空间大小 ② 查看表空间文件路径 ③ 通过新增表空间文件拓展表空间 ④ 查看表空间已分配大小 第一章:表空间的拓展 ① 查看剩余表空间大 ...

  7. undo表空间文件丢失恢复(3)--无备份无redo的情况下恢复

    undo表空间的数据文件丢失,如果没有备份的情况下,而且redo也不可用,这个时候就要采用隐藏参数来恢复,下边给出一个例子. undo表空间文件丢失恢复(1)--有备份的情况下恢复:http://bl ...

  8. Oracle11使用现在数据库文件,oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库...

    oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库 最近由于系统重装,在还原dmp备份文件时,由于数据原因(用exp命令导出时表没有导出全部),导致系统不能正常运行.根据 ...

  9. mysql的Innodb的系统表空间和独立表空间

    mysql的Innodb的系统表空间和独立表空间 ============================================================= 主要区别 1:系统表空间无 ...

  10. oracle通过表空间文件进行数据库恢复,oracle通过DBF恢复数据

    前一段客户运行的项目数据库突然崩溃,并且没有进行数据备份.解决办法: 1,安装oracle 10g数据库并创建一个要恢复的数据库相同一的实例(注意:最好是新安装的数据库,并且安装的数据库尽量和要恢复的 ...

最新文章

  1. C++中getline函数的使用
  2. MySQL中表的操作
  3. 全球地区资料json 含中英文 经纬度_[喵咪软件推荐(1)]全球国家信息库
  4. Visual SVN Server 远程管理
  5. Jenkins X基本概念:Jenkins K8S helm Draft gitops
  6. 我画了35张图,就是为了让你深入 AQS!
  7. 一个事物两个方面的对比举例_《写作教练在你家》:推开写作之门第3课——对比的魔法...
  8. 一场由SameSite字段引发的前端悲剧
  9. 热电偶校验仪_热电偶校验方法_南昌手持热工校验仪,杭州全功能热工过程校验仪厂家...
  10. jetty jndi mysql_jetty配置jndi数据源
  11. 【第二届PHP全球开发者大会】惠新宸(鸟哥):PHP7性能之源
  12. 饭店计算机信息管理全章ppt,酒店信息质量管理.ppt
  13. 正大市场监管总局、发改委、证监会联合提醒告诫部分铁矿石
  14. js 跳转到指定位置 高德地图_JS控制div跳转到指定的位置的几种解决方案总结
  15. 处理接口幂等性的两种常见方案
  16. 软连接ln -s 创建以及删除
  17. win10有自带测试软件吗,Win10体检自带诊断工具在哪里打开 Win10关闭开机检测硬盘步骤...
  18. Java编程入门与应用 P124——例5-4(计算90度的正弦值、0度的余弦值、1的反正切值、120度的弧度值)
  19. RK3399平台开发系列讲解(网络调试)7.34、什么是iptables
  20. oracle数据库报错,ORA-01652:无法通过128(在表空间TEMP中)扩展temp段

热门文章

  1. Akka-Cluster(0)- 分布式应用开发的一些想法
  2. 公司内网机器vm ubuntu proxy 设置
  3. 学习笔记--maven
  4. 解决Win7上的连接access数据库的问题
  5. UVA 10330 Power Transmission
  6. powerdesigner安装之后会自动加载到word中怎么去除??
  7. 英语四级阅读猜题的技巧
  8. 干货 | 一文轻松了解NLP所有相关任务简介!
  9. dtreeviz 画树模型
  10. 最全攻略:利用LightSeq加速你的深度学习模型