MariaDB 加密特性及使用方法

作者介绍:吴洪辉 腾讯云工程师

MariaDB在10.1.3版本中加入了支持表加密和表空间加密的特性,在10.1.7版本加入了支持binlog加密的特性,这使得我们可以对数据文件和binlog进行加密,避免数据文件、binlog等文件被窃取后破解出关键数据。

本文主要介绍MariaDB加密特性、使用方法。

一.MariaDB的加密特性

  • innodb表空间加密
  • innodb日志加密
  • binlog加密
  • aria表加密
  • 临时文件加密

加密特性的一些限制:

  1. 元数据文件(.frm)目前尚未加密
  2. 目前只有MariaDB server才能解密,mysqlbinlog工具还不支持解析加密后的binlog文件
  3. xtrabackup工具目前无法备份/恢复使用了加密特性的MariaDB实例
  4. 慢查询日志和错误日志尚未加密,里面可能会包含原始数据

二.使用MariaDB加密

为了保护加密后的数据,密钥一般存放在和数据文件不同的位置。MariaDB的密钥管理方式可以根据不同的保密需求来开发密钥管理插件,在默认情况下可以使用file_key_management插件,该插件以文件的方式存储密钥。

file_key_management插件:

相关参数:

file_key_management_filename:密钥文件位置, 比如/etc/my.cnf.d/file_key.txt

file_key_management_filekey:密钥文件的解密密码,如果密钥文件有加密的话则必须提供

file_key_management_encryption_algorithm:加密算法, AES_CBC/AES_CTR

密钥文件格式:

# MariaDB encryption file key
1;561A4A02DA569D12EE4A468236957432
2;561A4A02DA569D12EE4A468236957444
3;87A6C96D487659137E316A467BEA646787A6C96D487659137E316A467BEA6467

每行密钥由两部分组成,第一部分是密钥id,紧跟分隔符后面的是十六进制的密钥。 每个表可以单独指定一个密钥id(1-255)。不过innodb系统表空间和日志文件固定使用id为1的密钥来加密,所以密钥文件中一定要有id为1的密钥。如果存在密钥id为2的密钥,则会用来加密临时表和临时文件。

这里还可以对密钥文件本身进行加密来防止密钥文件外泄,例如把明文的file_key.txt文件加密成file_key_enc.txt,密码为`file_key_encrypt_key:

openssl enc -aes-256-cbc -md sha1 -k file_key_encrypt_key -in file_key.txt -out file_key_enc.txt`

innodb加密选项:

innodb-encrypt-tables:on/off/force, 是否加密所有innodb表, force表示强制加密所有innodb表

innodb-encrypt-log:on/off, 是否加密innodb日志文件

innodb-encryption-rotate-key-age:秒数,如果获取到了新密钥多久更新一次页面加密

innodb-encryption-rotation-iop:IOPS,最多允许用多少IOPS来做页面加密更新

innodb-encryption-threads:线程数,用多少个后台线程来做页面加密更新

binlog加密选项:

encrypt-binlog:on/off,是否加密binlog

其他加密选项:

encrypt_tmp_files:on/off,是否加密临时文件

encrypt_tmp_disk_tables:on/off,是否加密aria临时表

aria_encrypt_tables:on/off,是否加密aria表(只对ROW_FORMAT=PAGE)

加密测试:

在/etc/my.cnf.d/server.conf中添加:
plugin-load-add=file_key_management.so
file_key_management_encryption_algorithm=aes_cbc
file_key_management_filename = /etc/my.cnf.d/file_key_enc.txt
file_key_management_filekey = file_key_encrypt_key

innodb-encrypt-tables
innodb-encrypt-log
innodb-encryption-threads=4

encrypt-binlog
encrypt_tmp_files
encrypt_tmp_disk_tables
aria_encrypt_tables
添加完成后重启MariaDB服务。

创建不加密的表:

create table unencrypt_t(id int, name varchar(32)) ENCRYPTED=NO;

创建加密的表,指定密钥id为3:

create table encrypt_t(id int, name varchar(32)) ENCRYPTED=YES ENCRYPTION_KEY_ID=3;

修改不加密的表为加密:

alter table unencrypt_t ENCRYPTED=YES ENCRYPTION_KEY_ID=3;

修改加密的表为不加密:

alter table unencrypt_t ENCRYPTED=NO;

插入数据:

insert into unencrypt_t(id, name) values(1, 'one');
insert into encrypt_t(id, name) values(1, 'one');

已加密的数据文件对比未加密的数据文件:

binlog加密:

加密开启后的主备同步:

开启加密后,主机和备机之间的binlog传输是不加密的,由备机在写relaylog/binlog/数据文件时进行加密。所以主备之间的密钥可以不同,但id信息必须一致,否则建表语句在备机上无法执行成功,将会导致slave SQL线程中止。

加密和压缩:

数据加密和数据压缩可以同时使用,MariaDB先做数据压缩再做数据加密,可以节约很大的存储空间。

更多数据库文章,请关注腾讯云数据库公众号: QcloudCDB

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张绍文的专栏

基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)

随着近些年网络安全事情的频繁发生,使得用户对网络通信安全的意识越来越强。国内外的网络服务提供商都逐渐提供全站的安全通信服务,如国内的淘宝、百度先后宣布已经完成了...

1.9K0
来自专栏白驹过隙

OpenSSL - 利用OpenSSL自签证书和CA颁发证书

40417
来自专栏北京马哥教育

浅谈Openssl与私有CA搭建

随着网络技术的发展、internet的全球化,信息共享程度被进一步提高,各种基于互联网的应用如电子政务、电子商务日益增多并愈加被人们工作和生活依赖。但是,由于...

3388
来自专栏沈唁志

PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?

RSA算法是现今使用最广泛的公钥密码算法,也是是号称地球上最安全的加密算法,与 md5 和 sha1 不同,到目前为止,也只有极短的RSA加密被破解

975
来自专栏腾讯Bugly的专栏

HTTPS 原理浅析及其在 Android 中的使用

本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理。然后通过抓包分析HTTPS协议的握手以及通信过程。

3924
来自专栏java一日一条

详解Https是如何确保安全的?

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单...

541
来自专栏曹丰斌的专栏

HTTPS 原理浅析及其在 Android 中的使用

本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理。然后通过抓包分析HTTPS协议的握手以及通信过程。最后总结一下自己在...

3.4K0
来自专栏Golang语言社区

Go和HTTPS--1

近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTT...

3244
来自专栏上善若水

041android初级篇之apk签名key keystore格式转pk8+x509.pem

常用的android的签名工具有两个即jarsigner 和apksigner。这两种使用的key格式不一样,keystore格式转pk8+x509.pem

1484
来自专栏Netkiller

数据库安全·数据加密

以下节选择《Netkiller Architect 手札》 作者:netkiller 地址 http://www.netkiller.cn/archit...

3975

扫码关注云+社区