MySQL内核月报 2015.02-MariaDB · 特性分析· 表/表空间加密

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

Google向MariaDB 10.1.13(暂未Release)贡献了这个补丁,可以对表/表空间进行加密。

加密过的表可以防止某些非授权用户访问或偷取磁盘然后通过访问原始数据文件来偷取数据。当然,假设你已经把密钥文件存储在另一个系统上。但是,使用加密可能会降低差不多10%的性能。目前,只有XtraDB/InnoDB引擎能完全支持加密。

MariaDB在InnoDB/XtraDB中支持两种方式的加密:

Table encryption(表级加密): 只有在创建时指定 PAGE_ENCRYPTION=1 的表才被加密。

Tablespace encryption(表空间加密): 当前实例下的任何文件都被加密(包括日志文件)。

MariaDB中所有的加密算法都是基于AES的。但是你可以在启动的时候使用 --encryption-algorithm=name 来指定具体哪种基于AES的加密算法,有这些可选:

选项 描述
none 默认值。不进行任何加密。
aes_cbc 建议值。这是大部分欧洲政府接受的算法。
aes_ctr 一种新的块加密模式,Google自己开发的,并且在他们的MariaDB实例中使用的算法。
aes_ecb 这种加密模式用于内部计数器计算。你可以用它来加密,但它不能提供强保密性。


密钥的管理

为了保护加密过的数据,密钥必须另外保存,不要跟数据文件放在一个地方。默认情况下,MariaDB支持两种密钥管理方式,都是以Plugin的方式实现的。

1) file_key_management_plugin

file_key_management_plugin 是一个密钥管理插件,可以从文件中读取密钥。这个插件有如下配置选项:

file_key_management_plugin_filename=path-to-key-file: 密钥文件存放的位置

file_key_management_plugin_filekey: 一个可选的Key,用来解密密钥文件

一个my.cnf配置的例子:

 

这个密钥文件(/home/mdb/keys.enc)包含了AES密钥。128, 192 或 256位密钥都可以支持。ID有16个字节。 一个密钥文件内容的例子如下:

 

1是密钥的标识,在建表的时候可以指定使用哪个密钥; 接着是16字节的ID,最后是一个16字节的AES密钥。密钥标识可以从0~255,但是0号密钥是保留给InnoDB日志文件使用的,不要在建表的时候用。

密钥文件本身同样可以加密,file_key_management_plugin_filekey定义的密钥可以用来解密密钥文件。OpenSSL命令行工具可以用来创建密钥文件。例如:

 

如果密钥文件在启动的时候读取不到(例如没提供解密密钥文件的Key),那么加密功能不再被支持,也无法访问被加密过的表。


2) example_key_management_plugin

为了获得真正高强度的加密,密钥必须周期性的变更。

example_key_management_plugin 是一个实现的例子。用你自己的密钥管理系统替换这个插件,可以创建一个非常安全的系统,例如从远程服务器来获取密钥。Google内部就是这么做的。

当然,example_key_management_plugin 仅仅是一个例子,你要根据它来编写你自己的Plugin!

加密数据

1)表级加密

表级加密意味着你可以选择哪些表需要加密。这可以让你在速度和安全性之间获得平衡。

要使用表级加密,你要这样做:

  • 设置 encryption-algorithm 选择你需要的加密算法;
  • 载入 file-key-management-plugin 插件或者其他相似的插件,添加 enable-file-key-management-plugin 到你的my.cnf文件。

要加密一个表,你需要在CREATE/ALTER TABLE 语句中使用新的参数:

选项 可选值 描述
PAGE_ENCRYPTION 0 或 1 1是启用这个功能,0是关闭
PAGE_ENCRYPTION_KEY 0-255 密钥表示。这个值表示用那个密钥。

例如:

 

这个建表语句会创建一个表T,使用标识为17的密钥加密。

 

更改表T使用标识为18的密钥来加密。如果你之前加密过这张表,那会首先解密这张表再重新加密。

 

关闭表T的加密功能。如果之前是加密的,那这个操作会做解密。


2) 表空间加密

要使用加密表空间,需要这样做:

  • 设置 encryption-algorithm 来选择加密算法;
  • 设置 innodb-encrypt-tables 为 1;
  • 载入 file-key-management-plugin 插件或者其他相似的插件,添加 enable-file-key-management-plugin 到你的 my.cnf 文件;
  • 启用 innodb-tablespaces-encryption 插件;
  • 启用 innodb-tablespaces-scrubbing 插件。

有下列变量可以配置加密项:

变量 可选值 描述
innodb-encrypt-tables Boolean (0 or 1) 是否在存储引擎加密所有表
innodb-encryption-rotate-key-age 秒数 如果获取到了新密钥多久更新一次页面加密
innodb-encryption-rotation-iop IOPS数 后台使用多少IOPS来做页面加密更新
innodb-encryption-threads 线程数 用多少个后台线程来做页面加密更新和清理
innodb-background-scrub-data-check-interval 秒数 隔多久检查空间是否需要清理
innodb-background-scrub-data-compressed Boolean (0 or 1) 打开通过后台线程来清理压缩数据
innodb-background-scrub-data-interval 秒数 隔多久调用一次清理
innodb-background-scrub-data-uncompressed Boolean (0 or 1) 打开通过后台线程来清理未压缩数据

清理(Scrubbing)意味着有一个后台线程定期的扫描所有的表并且对所有页面升级压缩密钥。

配置表空间加密的示例 my.cnf:

 

加密和压缩

加密和压缩(配合FusionIO使用的功能,之前的月报介绍过)可以同时使用。这可以让MariaDB先压缩数据然后再做加密,这种情况下可以很大的节省存储空间,并且数据更难被解密。


目录
相关文章
|
18天前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
6月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
4月前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
6月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
5月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
5月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
6月前
|
人工智能 监控 安全
未来金融将如何借助加密货币发展,可以从以下几个方面进行清晰的分析和归纳
**区块链与加密货币推动金融革命:降低交易成本,提高安全,扩大服务范围,赋能智能合约与DeFi,及改变监管方式。加密经济助力金融效率与普惠性,但也伴随风险,需平衡发展与监管。**
|
6月前
|
存储 SQL 安全
网络安全与信息安全:漏洞分析与加密技术探讨
在当今数字化时代,网络安全与信息安全日益成为全球关注的焦点。本文深入探讨了网络安全中的常见漏洞类型及其影响,并介绍了当前流行的加密技术和提升安全意识的方法,旨在为读者提供系统的知识分享与技术探讨。
54 3
|
6月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
154 3
|
5月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

相关产品

  • 云数据库 RDS MySQL 版