Klustron日志文件加密功能和用法示例
Klustron日志文件加密功能和用法示例
注意:
如无特别说明,文中的版本号可以使用任何已发布版本的版本号代替。所有已发布版本详见:http://doc.klustron.com/zh/Release_notes.html。
本文目标:
主要内容是首先介绍数据库日志文件加密的特性。介绍如何在Klustron安装日志文件加密插件,如何启用日志文件加密配置步骤,然后测试日志文件加密使用测试,在操作系统层面直接查看加密日志文件和非加密日志文件的数据内容进行对比,最后还测试验证日志加密后对存储节点数据同步不受影响,日志的加密对于数据同步是透明的。
01 Klustron 日志文件的作用和特点
Klustron的二进制日志(Binlog)是一个重要的组件,用于记录数据库的更改操作,其作用和特点如下:
1.1 Binlog日志作用
a) 数据恢复和备份: Binlog记录了数据库中的所有更改操作,包括INSERT、UPDATE和DELETE等操作。这使得Binlog成为恢复数据库到先前状态的关键工具。通过分析Binlog,您可以还原数据库到特定的时间点,以便于数据恢复和备份。
b) 数据库复制: Binlog在数据库复制中发挥了关键作用。主数据库将Binlog事件传输给从数据库,从而实现主从复制(Master-Slave Replication)。这允许从数据库保持与主数据库同步,并用于读操作负载均衡、故障切换和数据分发等目的。
c) 数据审计和跟踪: Binlog可以用于跟踪数据库中的更改操作,以便进行数据审计和监控。它记录了谁在什么时间修改了数据库的哪些数据。
d) 数据迁移: Binlog还可以用于在不同的MySQL服务器之间迁移数据。通过将Binlog事件应用到目标数据库,可以将数据从一个服务器复制到另一个服务器。
1.2 Binlog日志特性
a) 记录所有更改操作: Binlog以二进制格式记录了数据库中的每个更改操作,包括SQL语句和相应的数据。这使得它非常强大,可以还原数据库到任何时间点。
b) 可扩展性: Binlog可以配置以不同的方式记录事件,包括完整的语句事件、行事件以及混合模式。这使得Binlog在不同场景下具有更大的灵活性。
c) 异步记录: Binlog是异步记录的,这意味着它不会对数据库的写入性能产生明显的影响。写操作会立即返回,而Binlog事件会在后台异步记录。
d) 可定制性: 管理员可以配置Binlog的大小、保留期限、命名方式等参数,以满足不同的需求和策略。
e) 安全性: Binlog文件通常位于服务器上,并受到访问权限的保护,以防止未经授权的访问。
f) 用途广泛: Binlog不仅用于备份和恢复,还用于实时复制、数据同步、数据迁移、性能分析和数据审计等各种用途。
需要注意的是,Binlog虽然非常有用,但也需要谨慎使用和管理。合理配置和维护Binlog是确保数据库稳定性和安全性的关键一步。
02 Klustron binlog 加密的特点
Klustron 的二进制日志(Binlog)通常不会以原始形式加密。Binlog记录了数据库的更改操作,包括INSERT、UPDATE、DELETE等操作,以便于数据库复制、备份和恢复等用途。然而,对Binlog数据进行加密是一种有用的安全措施,以防止未经授权的访问或泄露敏感信息。
Binlog加密特性:
a) 数据保护: Binlog包含了数据库的关键更改历史,因此加密可以保护敏感数据免受未经授权的访问和泄露。
b) 安全性提升: 加密Binlog可以增强整个数据库系统的安全性。即使攻击者能够访问Binlog文件,他们也无法轻易解密其中的内容。
c) 合规性需求: 对于需要满足特定合规性要求(如GDPR、HIPAA等)的组织来说,对Binlog数据进行加密可能是必需的。
d) 性能开销: 加密和解密数据可能会对系统性能产生一定的开销,特别是在高负载情况下。因此,需要权衡安全性和性能之间的权衡。
e) 管理和维护: 实施Binlog加密需要管理密钥和证书,以及确保正确配置和运行加密组件。这需要额外的管理和维护工作。
03 Klustron 安装加密插件和启用Binlog加密
3.1 连接到存储节点上,查看当前数据库是否启用Binlog日志文件加密。
[root@kunlun2 ~]# su – Kunlun
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57005/kunlun-storage-1.2.1/dba_tools/
[kunlun@kunlun2 dba_tools]$ ./imysql.sh 57005
mysql> show variables like '%binlog_encryption%';
mysql> show binary logs;
当前Binlog日志文件没有加密。
3.2 在存储节点上安装加密插件,创建存放加密keyring文件目录‘/kunlun/mysql-keyring/’
[root@kunlun2 ~]# su - kunlun
[kunlun@kunlun2 ~]$ mkdir /kunlun/mysql-keyring/
3.3 修改所有存储节点配置文件,在配置文件中修改以下内容:
[kunlun@kunlun2 ~]$ vi /kunlun/storage_datadir/57003/data/57003.cnf
early-plugin-load=keyring_file.so
keyring_file_data=/kunlun/mysql-keyring/keyring
binlog_encryption=on
3.4 需要修改所有存储节点配置文件,例如这里还修改如下两个文件(按3.3步骤操作)
[kunlun@kunlun2 ~]$ vi /kunlun/storage_datadir/57005/data/57005.cnf
[kunlun@kunlun2 ~]$ vi /kunlun/storage_datadir/57007/data/57007.cnf
3.5 修改完配置文件后重启存储节点
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57003/kunlun-storage-1.2.1/dba_tools
[kunlun@kunlun2 ~]$ ./stopmysql.sh 57003
[kunlun@kunlun2 ~]$ ./startmysql.sh 57003
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57005/kunlun-storage-1.2.1/dba_tools
[kunlun@kunlun2 ~]$ ./stopmysql.sh 57005
[kunlun@kunlun2 ~]$ ./startmysql.sh 57005
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57007/kunlun-storage-1.2.1/dba_tools
[kunlun@kunlun2 ~]$ ./stopmysql.sh 57007
[kunlun@kunlun2 ~]$ ./startmysql.sh 57007
3.6 重启存储节点后验证成功安装加密插件
[kunlun@kunlun2 ~]$ mysql -h 192.168.56.113 -P57003 -upgx -ppgx_pwd
mysql> select * from information_Schema.plugins where plugin_name like '%keyring_file%'\G
mysql> show global variables like '%keyring%';
3.7 查看keyring文件已经生成,完成安装加密插件
[kunlun@kunlun2 ~]$ ls -l /kunlun/mysql-keyring
3.8 查看确认Binlog加密设置启用成功
[root@kunlun2 ~]# su – Kunlun
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57005/kunlun-storage-1.2.1/dba_tools/
[kunlun@kunlun2 dba_tools]$ ./imysql.sh 57005
mysql> show variables like '%binlog_encryption%';
mysql> show binary logs;
加密插件安装成功和启用Binlog日志文件加密。
04 Binlog 日志文件加密测试案例
这个是基于Binlog日志文件加密测试案例,启用Binlog日志文件加密后,对比没有启用和启用Binlog日志文件加密,对这两种类型的日志分别在操作系统层面直接查看文件内容并进行对比。
4.1 连接到存储节点上,查看当前数据库是否启用Binlog日志文件加密。
[root@kunlun2 ~]# su – Kunlun
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57005/kunlun-storage-1.2.1/dba_tools/
[kunlun@kunlun2 dba_tools]$ ./imysql.sh 57005
mysql> show variables like '%binlog_encryption%';
mysql> show binary logs;
4.2 通过从操作系统层面直接查看没有加密的binlog日志系统文件(没有加密的文件:biglog.000012),可以直接查看到文件存放的数据内容的明文信息
[root@kunlun2 ~]# su - kunlun
[kunlun@kunlun2 ~]$ hexdump -C /kunlun/storage_logdir/57005/binlog/binlog.000012
4.3 通过从操作系统层面直接查看加密的binlog日志系统文件(加密的文件:biglog.000014),查看到文件存放的数据已加密,无法获取文件的数据信息。
[root@kunlun2 ~]# su - kunlun
[kunlun@kunlun2 ~]$ hexdump -C /kunlun/storage_logdir/57005/binlog/binlog.000014
加密后的binlog日志系统文件查看到的密文,无法查看到文件的明文数据信息,保证了binlog日志数据的安全性。
05 Binlog 日志加密对存储节点数据同步透明案例
Binlog日志加密后,在计算节点连接数据库,对数据库进行访问操作,例如创建表,给表插入数据,然后查看各个存储节点上的表,验证Binlog日志加密后对存储节点间数据同步不受影响,同步是透明的,表和数据可以在各个数据库存储节点间同步。
5.1 连接到数据库,创建数据库用户、创建一个测试数据库,并给用户授权。
[root@kunlun1 ~]# su - kunlun
[kunlun@kunlun1 ~]$ psql -h 192.168.56.112 -p 47001 postgres
create user kunlun_user1 with password 'kunlun';
create database testdb_binlog;
grant all privileges on database testdb_binlog to kunlun_user1;
\c testdb_encypt kunlun_user1
5.2 创建数据表emp表,并给表插入数据。
CREATE TABLE emp (
empid int,
empname varchar(50),
salary int
);
insert into emp (empid,empname,salary) values(1001,'test',5000);
insert into emp (empid,empname,salary) values(1002,'admin',8000);
insert into emp (empid,empname,salary) values(1003,'operator',10000);
insert into emp (empid,empname,salary) values(1004,'auditor',12000);
insert into emp (empid,empname,salary) values(1005,'viewer',9000);
insert into emp (empid,empname,salary) values(1006,'test2',6000);
5.3 连接到57005的存储节点上查看emp表的数据
[root@kunlun2 ~]# su - kunlun
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57005/kunlun-storage-1.2.1/dba_tools
[kunlun@kunlun2 dba_tools]$ ./imysql.sh 57005
mysql> use testdb_binlog_$$_public
mysql> select * from emp;
5.4 连接到57007的存储节点上查看emp表的数据
[root@kunlun2 ~]# su - kunlun
[kunlun@kunlun2 ~]$ cd /kunlun/instance_binaries/storage/57007/kunlun-storage-1.2.1/dba_tools
[kunlun@kunlun2 dba_tools]$ ./imysql.sh 57007
mysql> use testdb_binlog_$$_public
mysql> select * from emp;
通过查看各个存储节点上的表和数据,验证Binlog日志加密后对存储节点数据同步不受影响,同步是透明的,表和数据可以在各个数据库存储节点间同步。
完成Binlog加密测试。