zoukankan      html  css  js  c++  java
  • mysql表空间加密 keyring encryption

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

    master key用于加密tablespace key,加密后的结果存储在tablespace的header中。tablespace key用于加密数据
    当用户想访问加密的表时,innoDB会先用master key对之前存储在header中的加密信息进行解密,得到tablespace key。再用tablespace key解密数据信息。tablespace key是不会被改变的(除非进行alter table t1 encrytion=NO, alter table t1 encrytion=YES)。而master key可以随时改变(ALTER INSTANCE ROTATE INNODB MASTER KEY;)

    InnoDB表空间加密依赖于keyring插件。总共有四个插件

    keyring插件 开始版本 类型
    keyring_file  5.7.11 社区版
    keyring_encrypted_file  5.7.21 企业版
    keyring_okv  5.7.12 企业版
    keyring_aws  5.7.19 企业版

    由于上面四种类型的加密后三种都只有在企业版本有,所以接下来的介绍主要以社区版本的keyring_file为例进行说明。


    安装:


    1.配置文件中加入如下参数:
    [mysqld]
    early-plugin-load=keyring_file.so
    keyring_file_data=/usr/local/mysql/mysql-keyring/keyring

     

    2.查看所加插件是否生效:
    SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
    +--------------+---------------+
    | PLUGIN_NAME | PLUGIN_STATUS |
    +--------------+---------------+
    | keyring_file | ACTIVE |
    +--------------+---------------+

    3.查看 innodb_file_per_table参数是否已经为开(default:ON)


    4.创建加密表空间
    CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';
    ALTER TABLE t1 ENCRYPTION='Y';

    5.取消加密表空间:
    ALTER TABLE t1 ENCRYPTION='N';


    master key需周期性地改变,增强安全性,master key rotation是原子的、实例级别的操作。轮换时,所有的tablespace key都会被重新用新master key加密并存储到相关的tablespace header中。
    更换master key只会改变master key和重新加密tablespace key,不会解密及重加密表空间数据。
    更换语句:ALTER INSTANCE ROTATE INNODB MASTER KEY;
    更换时,能够进行并发地DML操作,但是不能和CREATE TABLE ... ENCRYPTED 或 ALTER TABLE ... ENCRYPTED 并行。

    当在进行master key 更换时,实例挂掉。那在实例重启时会继续此操作。
    在重启过程中,keyring插件将优先于innoDB初始化执行,因为innoDB需要keyring插件来解密相关的数据,这也是为什么需要用early-plugin-load参数的原因(用--plugin-load 或 --plugin-load-add 加载的插件是在InnoDB初始化后才加载的。用 INSTALL PLUGIN加载的插件是注册在mysql.plugin表中,但它也是一个innodb表,里面注册的插件也是在innodb初始化后才执行的)。同时,mysql会去扫描所有的加密表空间文件。对于依旧使用旧master key的文件,innodb会先用old master key来解密tablespace key,再用new master key加密tablespace key后重写回tablespace header中。

    当导出一个加密的表时,InnoDB生成一个transfer key用来加密tablespace key,加密的tablespace key及transfer key存储在tablespace_name.cfp文件中。当导入时,InnoDB会使用transfer key来解密tablespace key。


    执行ALTER INSTANCE ROTATE INNODB MASTER KEY时,主从实例必须都得支持表空间加密才行
    ALTER INSTANCE ROTATE INNODB MASTER KEY执行成功后会被记录在binlog中。

     

    找出加密的表空间:
    SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION="Y"%';
    +--------------+------------+----------------+
    | TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
    +--------------+------------+----------------+
    | test | t1 | ENCRYPTION="Y" |
    +--------------+------------+----------------+

    注意:
    1.不能一次使用多个加密插件。
    2.确保master key的安全性,如果丢失,就会造成数据文件的不可用。在初次建立表空间加密及master key rotation时,建议备份
    3.ALTER TABLE ... ENCRYPTION 操作用 ALGORITHM=COPY重建表,不支持ALGORITHM=INPLACE
    4.如果实例退出,建立用同样的加密配置启动实例。
    5.第一个新的或存在的表加密时,会自动生成master key
    6.轮换Master key时只是重新加密tablespace key,并没有改变tablespace key,要改变tablespace key,需要用 ALTER TABLE tbl_name ENCRYPTION先禁用加密再重新加密,它使用ALGORITHM=COPY来重建表。
    7.如果一个表创建时使用compression及encryption选项,compression会在encryption前执行。
    8.如果keyring 数据文件(keyring_file_data变量)是空的或不存在,第一次执行 ALTER INSTANCE ROTATE INNODB MASTER KEY 会生成master key.
    9.卸载keyring_file 插件时并不会删除keyring 数据文件。
    10.不建议把keyring数据文件和tablespace表放在同一个目录中。
    11.在运行或重启时修改 keyring_file_data 变量会使之前加密的表不可访问,造成数据丢失


    限制:
    1.AES是唯一支持的加密算法。在InnodB表空间中,tablespace key使用Electronic Codebook (ECB)块加密模式,data使用Cipher Block Chaining (CBC)块加密模式.
    2.改变一个有的ENCRYPTION属性使用的是ALGORITHM=COPY,不支持ALGORITHM=INPLACE
    3.只支持加密存储在file-per-table的表,general tablespaces, system tablespace, undo log tablespaces,temporary tablespace不支持加密。
    4.不能把一个加密的表空间移到一个不支持的表空间类型。
    5.表空间加密只加密表空间中的数据,在redo log,undo log,binary log中的数据是不加密的。
    6.已经被加密的表不允许修改成其它存储引擎。

  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/zejin2008/p/9251203.html
Copyright © 2011-2022 走看看