MariaDB 加密特性及使用方法
版权声明:本文由吴洪辉原创文章,转载请注明出处:
文章原文链接: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.txtfile_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先做数据压缩再做数据加密,可以节约很大的存储空间。
MariaDB 加密特性及使用方法的更多相关文章
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- linux md5 加密字符串和文件方法
linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...
- asp.net中实现MD5加密、解密的方法
这个MD5加密.解密的方法会使用即可. 使用时的代码备忘:Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile(& ...
- DES加密 java与.net可以相互加密解密两种方法
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
- MySQL与MariaDB核心特性比较详细版v1.0(覆盖mysql 8.0/mariadb 10.3,包括优化、功能及维护)
注:本文严禁任何形式的转载,原文使用word编写,为了大家阅读方便,提供pdf版下载. MySQL与MariaDB主要特性比较详细版v1.0(不含HA).pdf 链接:https://pan.baid ...
- Java8新特性系列-默认方法
Java8 Interface Default and Static Methods 原文连接:Java8新特性系列-默认方法 – 微爱博客 在 Java 8 之前,接口只能有公共抽象方法. 如果不强 ...
- HTTP 基础(特性、请求方法、状态码、字段)
1. HTTP 简介(含义.特性.缺点) 2. HTTP 报文 3. GET 和 POST 4. 状态码 5. HTTP 头字段 1. HTTP 简介 HTTP 的含义 HTTP (HyperText ...
- iOS之加密的三种方法
//需要导入 #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString *str ...
- 使用Obsolete特性来标记方法过时或弃用
我们在维护一些老的系统的时候,经常会遇到某个方法不再使用的情况,我们又不能直接将其删除,因为系统中可能还有很多地方有引用它,所以比较安全保险的做法是,使用Obsolete特性来标记它过时或弃用.如下代 ...
随机推荐
- Codeforces Round #260 (Div. 2) A
Description One day Dima and Alex had an argument about the price and quality of laptops. Dima think ...
- ADO.NET增删改-------跟查不一样
建立数据库 create database ren go use database go create table user ( code nvarchar(20) primary key,--编号 ...
- 被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。 参数名: value
解决方案 添加this.IsMdiContainer = true; 或者下面的方法
- android source
h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...
- spring,mybatis事务管理配置与@Transactional注解使用[转]
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...
- mfc unicode下一些容易容易搞混的基本类型
经理要求以后的项目都使用unicode,整理以下看起来让人懵逼的基本类型... 其实在mfc中最容易让人发狂的就是关于字符的操作了. 两种常见基本C++char:(当然C++11新增char_16t. ...
- 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...
- Examples For When-Validate-Item trigger In Oracle Forms
The following example finds the commission plan in the COMMPLAN table, based on the current value of ...
- java传递和返回对象
java传递的只是一个引用,一定要注意准确认识在对象传递和赋值时所发生的一切. 事实上,java中的每个对象(除了基本数据类型以外)的标识符都属于指针的一种,但是其使用受到了严格的限制和防范,不仅在编 ...
- [Effective Java]第二章 创建和销毁对象
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...