文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL 表空间加密插件 Keyring

2024-12-13 23:59

关注

前言

MySQL支持对InnoDB单表空间、通用表空间、系统表空间和Redo、Undo文件进行静态加密。从8.0.16开始支持对Schema和通用表空间设置加密默认值,这就允许对在这些Schema和表空间中的表是否加密进行统一控制;静态加密功能依赖于Keyring组件或插件,MySQL社区版提供的Keyring file插件会将Keyring数据存储在服务器主机的本地文件系统中。

01 安装

  1. mkdir /usr/local/mysql/keyring 
  2. chown -R mysql.mysql keyring 
  1. [mysqld]early-plugin-load=keyring_file.sokeyring_file_data=/usr/local/mysql/keyring/keyring 
  1. mysql> select * from information_Schema.plugins where plugin_name like '%keyring%'\G 
  2. *************************** 1. row *************************** 
  3.            PLUGIN_NAME: keyring_file         
  4.            PLUGIN_VERSION: 1.0          
  5.            PLUGIN_STATUS: ACTIVE            
  6.            PLUGIN_TYPE: KEYRING 
  7.    PLUGIN_TYPE_VERSION: 1.1 
  8.         PLUGIN_LIBRARY: keyring_file.so 
  9. PLUGIN_LIBRARY_VERSION: 1.10 
  10.          PLUGIN_AUTHOR: Oracle Corporation 
  11.     PLUGIN_DESCRIPTION: store/fetch authentication data to/from a flat file 
  12.         PLUGIN_LICENSE: GPL 
  13.            LOAD_OPTION: ON 
  14.             
  15. mysql> show global variables like '%keyring%'
  16. +--------------------+----------------------------------+ 
  17. | Variable_name      | Value                            | 
  18. +--------------------+----------------------------------+ 
  19. | keyring_file_data  | /usr/local/mysql/keyring/keyring | 
  20. | keyring_operations | ON                               | 
  21. +--------------------+----------------------------------+ 
  22. rows in set (0.02 sec) 

02 加密操作

  1. mysql> alter table t7 encryption='Y';  Query OK, 2 rows affected (0.10 sec) 
  2. Records: 2  Duplicates: 0  Warnings: 0 
  3.  
  4. mysql> alter table t2 encryption='Y';  
  5. Query OK, 1 row affected (0.11 sec) 
  6. Records: 1  Duplicates: 0  Warnings: 0 
  7.  
  8.  
  9. mysql> alter  database test DEFAULT ENCRYPTION = 'Y'
  10. Query OK, 1 row affected (0.03 sec) 
  11.  
  12.  
  13. mysql> ALTER TABLESPACE mysql ENCRYPTION = 'Y';    
  14. Query OK, 0 rows affected (2.80 sec) 

03 取消加密

  1. mysql> alter table t2 encryption='N'
  2. Query OK, 1 row affected (0.11 sec) 
  3. Records: 1  Duplicates: 0  Warnings: 0 
  4.  
  5. mysql> alter table t7 encryption='N';  
  6. Query OK, 2 rows affected (0.08 sec) 
  7. Records: 2  Duplicates: 0  Warnings: 0 
  8.  
  9.  
  10. mysql> alter  database test DEFAULT ENCRYPTION = 'N'
  11. Query OK, 1 row affected (0.03 sec) 
  12.  
  13.  
  14. mysql> ALTER TABLESPACE mysql ENCRYPTION = 'N'
  15. Query OK, 0 rows affected (2.37 sec) 

04 查看元数据

  1. mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS        FROM INFORMATION_SCHEMA.PLUGINS        WHERE PLUGIN_NAME LIKE 'keyring%'
  2. +--------------+---------------+ 
  3. | PLUGIN_NAME  | PLUGIN_STATUS | 
  4. +--------------+---------------+ 
  5. | keyring_file | ACTIVE        | 
  6. +--------------+---------------+ 
  7. 1 row in set (0.01 sec) 
  1. mysql> SELECT * FROM performance_schema.keyring_keys; 
  2. +--------------------------------------------------+-----------+----------------+ 
  3. | KEY_ID                                           | KEY_OWNER | BACKEND_KEY_ID | 
  4. +--------------------------------------------------+-----------+----------------+ 
  5. | INNODBKey-8c537ce5-4a53-12eb-907d-000c298c47fa-1 |           |                | 
  6. +--------------------------------------------------+-----------+----------------+ 
  7. 1 row in set (0.00 sec) 

05 查看加密对象

  1. mysql> SELECT SPACENAME, SPACE_TYPE, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES        WHERE ENCRYPTION='Y'
  2. +------------+---------+------------+------------+ 
  3. SPACE      | NAME    | SPACE_TYPE | ENCRYPTION | 
  4. +------------+---------+------------+------------+ 
  5. | 4294967294 | mysql   | General    | Y          | 
  6. |        145 | test/t7 | Single     | Y          | 
  7. +------------+---------+------------+------------+ 
  8. rows in set (0.00 sec) 
  1. mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES  WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';       
  2. +--------------+------------+----------------+ 
  3. | TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS | 
  4. +--------------+------------+----------------+ 
  5. | test         | t7         | ENCRYPTION='Y' | 
  6. +--------------+------------+----------------+ 
  7. 1 row in set (0.04 sec) 
  1. mysql> SELECT SCHEMA_NAME, DEFAULT_ENCRYPTION FROM INFORMATION_SCHEMA.SCHEMATA   WHERE DEFAULT_ENCRYPTION='YES'
  2. +-------------+--------------------+ 
  3. | SCHEMA_NAME | DEFAULT_ENCRYPTION | 
  4. +-------------+--------------------+ 
  5. | test        | YES                | 
  6. +-------------+--------------------+ 
  7. 1 row in set (0.00 sec) 

06 加密秘钥轮换

加密秘钥应该定期轮换,轮换操作是原子的实例级别的操作。每次轮换主加密密钥时,MySQL 实例中的所有表空间密钥都会重新加密并保存回各自的表空间表头。如果轮换操作被服务器故障中断,重启后将会做前滚操作。

轮换操作只会更新主秘钥并重新加密表空间秘钥,并不会重新解密并加密表空间数据。

轮换操作需要Super权限或 ENCRYPTION_KEY_ADMIN权限;语句如下:

  1. ALTER INSTANCE ROTATE INNODB MASTER KEY

成功的 ALTER INSTANCE ROTATE INNODB MASTER KEY 语句将写入二进制日志以在副本上进行复制。

请确保对主秘钥进行备份(在创建和轮换后),否则可能无法恢复加密表空间中的数据。

07 通过Performance Schema监控加密进度

  1. mysql> system clear 
  2. mysql> USE performance_schema; 
  3. Database changed 
  4. mysql> UPDATE setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter tablespace (encryption)'
  5. Query OK, 0 rows affected (0.01 sec) 
  6. Rows matched: 1  Changed: 0  Warnings: 0 
  1. mysql> UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%'
  2. Query OK, 3 rows affected (0.01 sec) 
  3. Rows matched: 3  Changed: 3  Warnings: 0  
  1. mysql> ALTER TABLESPACE mysql ENCRYPTION = 'Y';  
  2. Query OK, 0 rows affected (2.80 sec) 

WORK_ESTIMATED 报告表空间中的总页数。

WORK_COMPLETED 报告处理的页数。

  1. mysql> select * from events_stages_current; 
  2. Empty set (0.00 sec) 
  1. mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_history; 
  2. +--------------------------------------------+----------------+----------------+ 
  3. | EVENT_NAME                                 | WORK_COMPLETED | WORK_ESTIMATED | 
  4. +--------------------------------------------+----------------+----------------+ 
  5. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  6. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  7. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  8. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  9. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  10. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  11. | stage/innodb/alter tablespace (encryption) |           2559 |           2559 | 
  12. +--------------------------------------------+----------------+----------------+ 
  13. rows in set (0.00 sec) 

关于作者

 

杨明翰,云和恩墨服务总监。拥有MySQL、TDSQL、TiDB、openGauss等认证。长期从事MySQL、PG、Redis、MongoDB的数据库技术服务。现负责云和恩墨西区开源数据库交付运维工作;热衷于开源数据库产品的研究。

 

来源:数据和云内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯