MySQL5.7开始支持表空间加密了,增强了MySQL的数据文件的安全性,这是一个很不错的一个功能,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file。

下面就来看看怎么安装,安装这个插件不用重启MySQL

1.安装插件

1.1 安装插件

(mysql5.7)root@localhost [(none)]> INSTALL PLUGIN keyring_file  soname 'keyring_file.so';
Query OK, 0 rows affected ( 0.01 sec)

2.创建密钥文件目录

mkdir -p /ssd01/3306/mysql-keyring/

chown -R mysql.mysql /ssd01/3306/mysql-keyring/

chmod 750  /ssd01/3306/mysql-keyring/

3.设置KEY文件,这个是动态参数,可以直接设置

(mysql5.7)root@localhost [(none)]> set global keyring_file_data='/ssd01/3306/mysql-keyring/keyring';

Query OK, 0 rows affected (0.00 sec)

(mysql5.7)root@localhost [(none)]>

4.重要事情说三遍:更新配置文件,避免遗忘更新配置文件,避免下次重启出问题

在my.cnf的[mysqld]段,加这两行

early-plugin-load=keyring_file.so

keyring_file_data=/ssd01/3306/mysql-keyring/keyring

##演示一下没有把keyring_file_data写到配置文件的情况。

KEY文件默认在base目录

(mysql5.7)root@localhost [(none)]> show global variables like '%keyring_file_data%';

+-------------------+----------------------------------+

| Variable_name     | Value                            |

+-------------------+----------------------------------+

| keyring_file_data | /usr/local/mysql/keyring/keyring |

+-------------------+----------------------------------+

1 row in set (0.00 sec)

插件还是在的

(mysql5.7)root@localhost [(none)]> show plugins;

+----------------------------+----------+--------------------+-----------------+---------+

| Name                       | Status   | Type               | Library         | License |

+----------------------------+----------+--------------------+-----------------+---------+

| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL            | GPL     |

| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL            | GPL     |

| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| partition                  | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL            | GPL     |

| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| ngram                      | ACTIVE   | FTPARSER           | NULL            | GPL     |

| keyring_file               | ACTIVE   | KEYRING            | keyring_file.so | GPL     |

+----------------------------+----------+--------------------+-----------------+---------+

45 rows in set (0.00 sec)

访问加密的表会报错,找不到master_key

(mysql5.7)root@localhost [test]> show create table test_1;
ERROR 3185 (HY000): Can't find master key from keyring, please check keyring plugin is loaded.

2.测试加密表

(mysql5.7)root@localhost [(none)]> use test11;

Database changed

(mysql5.7)root@localhost [test11]> alter table test1 encryption='Y';

Query OK, 17 rows affected (0.04 sec) Records: 17  Duplicates: 0  Warnings: 0

查看一下information_schema.tables 看看是否加密成功

(mysql5.7)root@localhost [test11]> select * from information_schema.tables where CREATE_OPTIONS like '%ENCRYPTION="Y"%'\G;

*************************** 1. row ***************************

TABLE_CATALOG: def

TABLE_SCHEMA: test11

TABLE_NAME: test1

TABLE_TYPE: BASE TABLE

ENGINE: InnoDB

VERSION: 10

ROW_FORMAT: Dynamic

TABLE_ROWS: 17

AVG_ROW_LENGTH: 963

DATA_LENGTH: 16384

MAX_DATA_LENGTH: 0

INDEX_LENGTH: 16384

DATA_FREE: 0

AUTO_INCREMENT: 102

CREATE_TIME: 2016-06-21 15:17:33

UPDATE_TIME: 2016-06-21 15:17:33

CHECK_TIME: NULL

TABLE_COLLATION: utf8_general_ci

CHECKSUM: NULL

CREATE_OPTIONS: ENCRYPTION="Y"

TABLE_COMMENT:

1 row in set (0.03 sec)

(mysql5.7)root@localhost [test11]>

也许有人问,我这个支持在线DDL么,其实想一下,加密表空间应该是拷贝表方式。

(mysql5.7)root@localhost [test]> alter table test_1 encryption='Y',ALGORITHM=INPLACE,LOCK=none;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Invalid encryption option.. Try ALGORITHM=COPY.
(mysql5.7)root@localhost [test]>

解密表空间

(mysql5.7)root@localhost [test]> alter table test1 encryption='N';

Query OK, 17 rows affected (0.01 sec) Records: 17  Duplicates: 0  Warnings: 0

(mysql5.7)root@localhost [test]> select * from information_schema.tables where CREATE_OPTIONS like '%ENCRYPTION="Y"%'\G;

Empty set (0.05 sec)

3.小结

安装插件很简单,有必要测试一下加密表空间对性能的影响。测试也很简单,用sysbench,tpcc先创建表,再修改为加密表空间。还有key密钥不要误删除了,不然就呵呵哒。你数据只能用备份来恢复了

MySQL5.7表空间加密的更多相关文章

  1. MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密.该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加 ...

  2. mysql表空间加密 keyring encryption

    从5.7.11开始,mysql开始支持物理表空间的加密,它使用两层加密架构.包括:master key 和 tablespace key master key用于加密tablespace key,加密 ...

  3. 10. InnoDB表空间加密

    10. InnoDB表空间加密 InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密. 详细信息见官方文档

  4. KingbaseES 表空间加密-透明加密

    透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...

  5. OCM_第三天课程:Section1 —》表空间的操作和管理、服务配置

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  6. Oracle加密表空间进行数据加密的示例

    接上篇:http://www.cnblogs.com/myrunning/p/4292049.html 1查看数据库版本 2查看当前数据库表空间 从这里看到我们此时数据库里没有加密表空间. 3创建加密 ...

  7. mysql-5.7 收缩系统表空间详解

    innodb 系统表空间是一个逻辑上的概念,它的物理表现就是innodb系统表空间文件:在讲扩展系统表空间时我们说到 可以用增加文件,增加autoextend标记 这两种方式来解决:但是问题到了收缩表 ...

  8. MySQL5.7 import表结构报错超出表空间界限

    事后测试了一下,一下方法就是垃圾,看看可以,别跟着学!!! 数据库重启后,问题依然暴露出来了,参数什么的都是扯,擦 记录一个困扰我好几天的问题.先贴上报错: space name jxtms/Cost ...

  9. MySQL5.7开启独立表空间参数innodb_file_per_table【原创】

    今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下: #因为是主从结构,在从库修改测试,先关闭binlog SET SQL_LOG_BIN=; show varia ...

随机推荐

  1. return的用法

    1.一般的就是用在有返回值的方法中,用来返回方法指定类型的值,同时结束方法执行: 2.可以用在返回值为void的方法中,用来终止方法运行:

  2. GitHub error “Failed to get HEAD”

    cd /要提交的文件的文件夹下    比如要提交一个名为  demo的  程序, 那么先进入demo 的文件夹里面  然后  进行以下两步 git init  (有时这个是不必要的,因为xcode 自 ...

  3. 8种方法提升windows 8使用方便-----Win+x 编辑菜单

    在windows 8上,你可以同时按下windows键和x键或者右键点击屏幕左下角打开一个菜单名为电源菜单或者快速访问菜单,这个菜单包含快速访问系统的工具,如控制面板,命令提示符,任务管理器,资源管理 ...

  4. 一个inline-block的样式。

    <span style="height: 31px; font-family: 宋体; font-weight: bold; color: rgb(160, 64, 0); text- ...

  5. javascript_22_for_js性感的v

    <script type="text/javascript"> window.onload=function(){ var aDiv=document.getEleme ...

  6. 【转载】Ext中关于Ext.QuickTips.init()的使用

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:然嗄      原文地址:http://www.cnblogs.com/jia ...

  7. 【BZOJ】【1532】【POI2005】Kos-Dicing

    网络流/二分法 最大值最小……直接做不太好做的时候就可以用二分+判定来搞. 这题我们就也可以二分最大胜场v,那么怎么来判定呢?首先我们发现:每场比赛要么A赢,要么B赢,这一点跟二分图匹配非常类似,那么 ...

  8. WPF 显示初始化界面

    今天在看<WPF编程宝典>时,看到了Application类,该类可以做很多事情,我认为比较实用的是显示初始化界面,因为之前有个项目在打开的时候要加载好多dll,非常耗时,让客户等的蛋疼, ...

  9. POJ 1928

    #include <iostream> #include <algorithm> #define MAXN 3000 using namespace std; struct n ...

  10. JsRender系列demo(3)-自定义容器

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...