MariaDB 加密特性及使用方法
2016-11-07 15:54
288 查看
MariaDB在10.1.3版本中加入了支持表加密和表空间加密的特性,在10.1.7版本加入了支持binlog加密的特性,这使得我们可以对数据文件和binlog进行加密,避免数据文件、binlog等文件被窃取后破解出关键数据。
本文主要介绍MariaDB加密特性、使用方法。
innodb表空间加密
innodb日志加密
binlog加密
aria表加密
临时文件加密
加密特性的一些限制:
元数据文件(.frm)目前尚未加密;
目前只有MariaDB server才能解密,mysqlbinlog工具还不支持解析加密后的binlog文件
xtrabackup工具目前无法备份/恢复使用了加密特性的MariaDB实例。
慢查询日志和错误日志尚未加密,里面可能会包含原始数据。
为了保护加密后的数据,密钥一般存放在和数据文件不同的位置。MariaDB的密钥管理方式可以根据不同的保密需求来开发密钥管理插件,在默认情况下可以使用
相关参数:
密钥文件格式:
每行密钥由两部分组成,第一部分是密钥id,紧跟分隔符后面的是十六进制的密钥。
每个表可以单独指定一个密钥id(1-255)。不过innodb系统表空间和日志文件固定使用id为1的密钥来加密,所以密钥文件中一定要有id为1的密钥。如果存在密钥id为2的密钥,则会用来加密临时表和临时文件。
这里还可以对密钥文件本身进行加密来防止密钥文件外泄,例如把明文的file_key.txt文件加密成file_key_enc.txt,密码为
innodb加密选项:
binlog加密选项:
其他加密选项:
加密测试:
创建不加密的表:
创建加密的表,指定密钥id为3:
修改不加密的表为加密:
修改加密的表为不加密:
插入数据:
已加密的数据文件对比未加密的数据文件:
![](https://mc.qcloudimg.com/static/img/376ab89285e6da0fa6a5cd84fe11d1b0/image.png)
binlog加密:
![](https://mc.qcloudimg.com/static/img/2ab1f4f16f86c9818d3052d6ac6ccff4/image.png)
加密开启后的主备同步:
开启加密后,主机和备机之间的binlog传输是不加密的,由备机在写relaylog/binlog/数据文件时进行加密。所以主备之间的密钥可以不同,但id信息必须一致,否则建表语句在备机上无法执行成功,将会导致slave SQL线程中止。
加密和压缩:
数据加密和数据压缩可以同时使用,MariaDB先做数据压缩再做数据加密,可以节约很大的存储空间。
本文主要介绍MariaDB加密特性、使用方法。
一.MariaDB的加密特性
innodb表空间加密innodb日志加密
binlog加密
aria表加密
临时文件加密
加密特性的一些限制:
元数据文件(.frm)目前尚未加密;
目前只有MariaDB server才能解密,mysqlbinlog工具还不支持解析加密后的binlog文件
xtrabackup工具目前无法备份/恢复使用了加密特性的MariaDB实例。
慢查询日志和错误日志尚未加密,里面可能会包含原始数据。
二.使用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');
已加密的数据文件对比未加密的数据文件:
![](https://mc.qcloudimg.com/static/img/376ab89285e6da0fa6a5cd84fe11d1b0/image.png)
binlog加密:
![](https://mc.qcloudimg.com/static/img/2ab1f4f16f86c9818d3052d6ac6ccff4/image.png)
加密开启后的主备同步:
开启加密后,主机和备机之间的binlog传输是不加密的,由备机在写relaylog/binlog/数据文件时进行加密。所以主备之间的密钥可以不同,但id信息必须一致,否则建表语句在备机上无法执行成功,将会导致slave SQL线程中止。
加密和压缩:
数据加密和数据压缩可以同时使用,MariaDB先做数据压缩再做数据加密,可以节约很大的存储空间。
相关文章推荐
- MariaDB 加密特性及使用方法
- MariaDB 加密特性及使用方法
- Win10系统盘启用BitLocker加密详细方法及使用备份密钥解密BitLocker(多图)
- JAVA加密工具类Cipher 使用方法
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
- iOS的各种加密方法使用简介
- android新特性: 底部导航栏BottomNavigationView系统库与第三方库的两种不同库的使用方法
- Android开发——RecyclerView特性以及基本使用方法(二)
- Android开发——RecyclerView特性以及基本使用方法(一)
- Android开发——RecyclerView特性以及基本使用方法(一)
- Android开发——RecyclerView特性以及基本使用方法(二)
- JDK8新特性:使用Method References实现方法复用,简化lambda表达式
- Task是.net 4.0中的一个新特性,提供的功能非常强大,下面是其具体的使用方法演示:
- android新特性:TextInputLayout使用方法
- 六、三大特性~OC弱语法、类方法、self使用
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- 关于sentinel LDK加密war包实现应用加密的使用方法
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- Android 使用Java8新特性之"方法引用"
- C#使用Dotfuscator混淆代码的加密方法