MariaDB 加密特性及使用方法
2019独角兽企业重金招聘Python工程师标准>>>
版权声明:本文由吴洪辉原创文章,转载请注明出处:
文章原文链接:https://www.qcloud.com/community/article/193
来源:腾云阁 https://www.qcloud.com/community
MariaDB在10.1.3版本中加入了支持表加密和表空间加密的特性,在10.1.7版本加入了支持binlog加密的特性,这使得我们可以对数据文件和binlog进行加密,避免数据文件、binlog等文件被窃取后破解出关键数据。
本文主要介绍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_keyinnodb-encrypt-tables
innodb-encrypt-log
innodb-encryption-threads=4encrypt-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先做数据压缩再做数据加密,可以节约很大的存储空间。
转载于:https://my.oschina.net/u/2987407/blog/785777
MariaDB 加密特性及使用方法相关推荐
- WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法
WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC API 和 Leak 本文是 WebRTC 的第三篇教程,主要介绍了 WebRTC 的一些特性,调试方 ...
- Java高级特性:clone()方法
标签:ringbuf his 硬件 throws port protect 序列化 ext this 目录 源码 深拷贝和浅拷贝 对象串行化实现拷贝 常见面试题 源码 ...
- Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法
Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法 参考文章: (1)Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法 (2)https: ...
- swoolephp加密_PHP中给源代码加密的几种方法
商业使用推荐 Swoole Compiler 代码加密 以下是如何通过PHP的自定义函数来加密我们的PHP源代码 方法一 function encode_file_contents($filename ...
- 理解AES加密解密的使用方法
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...
- macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法
4月0日凌晨,苹果发布了iOS12.3 beta2,作为iOS12.3第二个测试版,相比前一个版本,发布时间间隔近2周,这次依然是小版本更新,不过相对良心一些,主要是多了一些与国内用户相关的东西.iO ...
- linux md5 加密字符串和文件方法
linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...
- 【java8新特性】——默认方法(五)
一.简介 默认方法是指接口的默认方法,它是java8的新特性之一.顾名思义,默认方法就是接口提供一个默认实现,且不强制实现类去覆写的方法.默认方法用default关键字来修饰. 默认方法可以解决的痛点 ...
- [转]DES加密 java与.net可以相互加密解密两种方法
[转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...
最新文章
- 在报No suitable driver found for jdbc:mysql情况下,我是如何一步一步实现jmeter成功连接mysql...
- (双引号)与 ' '(单引号)的区别
- Redux入门之实现一个迷你版的Redux
- 起底商汤校招需求TOP 10岗位 | 智慧城市事业群空宣来了~~
- C# 通过pid获取hwnd / 通过pid查找hwnd
- 基于2D-RNN的鲁棒行人跟踪
- echo回声不能用了_已懂得用电子分频器,为何不继续加个效果器让音响效果更好?...
- (二)ubuntu使用launchpad.net线上编译
- [转载] Visual Studio 2017 VC项目设置 printf 输出到 Console 窗口调试
- python的全局变量和局部变量
- 程序实现对数据排序并按出现次数进行排序 程序实现对数据排序并按出现次数进行排序(注:用面向对象的方式实现,用for循环进行排序,别用comparable接口实现){1,4,2,1,3,2,1,4}作为
- 优雅使用百度云进行表格OCR识别(python版)
- 机器学习防止模型过拟合方法总结
- iPone强制关机 小技巧
- Nginx实现域名跳转
- 资料汇总更新|软件安装包、书籍、源码、技术文档、手册……
- 咸鱼前端—CSS盒子模型
- 微信朋友圈怎么发文字?微信怎么发朋友圈只发文字?
- JAVA生成跳转指定页面并且附带参数的二维码
- Windows环境下安装PyMySQL(已安装Anaconda)