KingbaseES V8R3 表加密
前言
透明加密是指将数据库page加密后写入磁盘,当需要读取对应page时进行加密读取。此过程对于用户是透明, 用户无需干预。
该文档进行数据库V8R3版本测试透明加密功能,需要说明,该版本发布时间早于V8R6,所以只能进行表加密,而没有表空间加密功能。
测试透明加密
参数说明:
a) encrypt_user_table:布尔型。
b) 参数级别:用户级。
c) 参数值域、默认值:默认值为off,表示不开启用户表默认加密。
实验数据库版本环境:
TEST=# select * from version();
VERSION
-------------------------------------------------------------------------------------------------------------------------
Kingbase V008R003C002B0340 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
(1 row)
1、创建非默认加密表
此时的参数encrypt_user_table=off:
TEST=# show encrypt_user_table ;
encrypt_user_table
--------------------
off
(1 row)
create table 语法方式创建加密表,注意语法中加入了关键字ENCRYPTED:
SYSTEM用户创建加密表
TEST=# CREATE TABLE TABLE_ENCRYPT(a INT, b varchar(10)) ENCRYPTED;
CREATE TABLE
TEST=# SELECT RELNAME, RELISENCRYPTED, LENGTH(RELTDEKEY) FROM SYS_CLASS WHERE RELNAME='TABLE_ENCRYPT';
RELNAME | RELISENCRYPTED | LENGTH
---------------+----------------+--------
TABLE_ENCRYPT | t | 32
(1 row)
注:字段说明
relisencrypted bool 该对象是否是透明加密的。
创建索引也是加密的
TEST=# CREATE INDEX TABLE_ENCRYPT_INDEX ON TABLE_ENCRYPT(a);
CREATE INDEX
TEST=# SELECT RELNAME, RELISENCRYPTED, LENGTH(RELTDEKEY) FROM SYS_CLASS WHERE RELNAME='TABLE_ENCRYPT_INDEX';
RELNAME | RELISENCRYPTED | LENGTH
---------------------+----------------+--------
TABLE_ENCRYPT_INDEX | t | 32
(1 row)
插入数据,查看表文件:
TEST=# insert into TABLE_ENCRYPT values(1, 'aaaa');
INSERT 0 1
TEST=# insert into TABLE_ENCRYPT values(2, 'bbbb');
INSERT 0 1
TEST=# checkpoint;
CHECKPOINT
TEST=# select sys_relation_filepath('TABLE_ENCRYPT');
SYS_RELATION_FILEPATH
-----------------------
base/14941/49218
(1 row)
SYSTEM用户创建非加密表(普通表),并查看表文件:
TEST=# CREATE TABLE TABLE_NOENCRYPT(a INT, b varchar(10));
CREATE TABLE
TEST=# insert into TABLE_NOENCRYPT values(1, 'aaaa');
INSERT 0 1
TEST=# insert into TABLE_NOENCRYPT values(2, 'bbbb');
INSERT 0 1
TEST=# checkpoint;
CHECKPOINT
TEST=# select sys_relation_filepath('TABLE_NOENCRYPT');
SYS_RELATION_FILEPATH
-----------------------
base/14941/57411
(1 row)
如下图,使用操作系统命令hexdump 查看表已经加密成功:从输出结果已经看不到连续字符‘aaaa’,转为其他乱码字符显示。

下面的图片为非加密表的输出结果,可以看到输出了‘aaaa’表中的数据,说明表没有进行加密。

2、创建默认加密表:
确认修改配置文件,kingbase.conf,增加encrypt_user_table=on,重启数据库。
这里create table 创建表语法与创建普通表无异,不需要增加关键字ENCRYPTED
SYSTEM用户创建用户表:
TEST=# show encrypt_user_table ;
encrypt_user_table
--------------------
on
(1 row)
TEST=# CREATE TABLE TABLE_ENCRYPT(a INT, b varchar(10)) ;
CREATE TABLE查看视图sys_class中已经进行加密
TEST=# SELECT RELNAME, RELISENCRYPTED, LENGTH(RELTDEKEY) FROM SYS_CLASS WHERE RELNAME='TABLE_ENCRYPT';
RELNAME | RELISENCRYPTED | LENGTH
---------------+----------------+--------
TABLE_ENCRYPT | t | 32
(1 row)
插入数据,查看表文件:
TEST=# insert into TABLE_ENCRYPT values(1, 'aaaa');
INSERT 0 1
TEST=# insert into TABLE_ENCRYPT values(2, 'bbbb');
INSERT 0 1
TEST=# checkpoint;
CHECKPOINT
TEST=# select sys_relation_filepath('TABLE_ENCRYPT');
SYS_RELATION_FILEPATH
-----------------------
base/14941/49228
(1 row)
hexdump 查看表也被加密,‘aaaa’字符已经不能正常显示。

3、使用CTS语法为已存在非加密表进行加密
TEST=# \d aaa
Table "PUBLIC.AAA"
Column | Type | Modifiers
--------+---------+-----------
EE | INTEGER |
NAME | TEXT |
AAA表未加密
TEST=# SELECT RELNAME, RELISENCRYPTED, LENGTH(RELTDEKEY) FROM SYS_CLASS WHERE RELNAME='AAA';
RELNAME | RELISENCRYPTED | LENGTH
---------+----------------+--------
AAA | f |
(1 row)
AAA表数据:
TEST=# select* from aaa;
EE | NAME
----+------
1 |
2 |
3 |
4 |
5 | king
(5 rows)
需要参数encrypt_user_table开启
TEST=# show encrypt_user_table ;
encrypt_user_table
--------------------
on
(1 row)
TEST=# create table TABLE_ENCRYPT2 as select * from aaa;
SELECT 5
TEST=#
创建完TABLE_ENCRYPT2表处于加密模式
TEST=# SELECT RELNAME, RELISENCRYPTED, LENGTH(RELTDEKEY) FROM SYS_CLASS WHERE RELNAME='TABLE_ENCRYPT2';
RELNAME | RELISENCRYPTED | LENGTH
----------------+----------------+--------
TABLE_ENCRYPT2 | t | 32
(1 row)
TABLE_ENCRYPT2表数据和表AAA一致
TEST=# select * from TABLE_ENCRYPT2;
EE | NAME
----+------
1 |
2 |
3 |
4 |
5 | king
(5 rows)
TEST=# select sys_relation_filepath('TABLE_ENCRYPT2');
SYS_RELATION_FILEPATH
-----------------------
base/14941/57414
(1 row)
hexdump查看TABLE_ENCRYPT2表已经处于加密状态,数据king无法正常显示 hexdump -c 57414 |grep k

查看非加密表文件:
TEST=# select sys_relation_filepath('AAA');
SYS_RELATION_FILEPATH
-----------------------
base/14941/24580
(1 row)
hexdump查看AAA表没有处于加密状态 hexdump -c 24580 |grep k
如图,没加密情况可以正常显示数据king

结论
KingbaseESV8R3版本数据库可以配置透明加密功能中的表加密,但没有实现表空间加密功能,建议客户尽量使用V8R6版本透明加密功能。
KingbaseESV8R3版本数据库可以通过create table语法中加入关键字ENCRYPTED实现表加密,也可以通过在kingbase.conf中设置参数encrypt_user_table=on实现默认表加密功能。
KingbaseESV8R3数据库可以通过CTS方式将未加密的表改为加密方式存储。
KingbaseES V8R3 表加密的更多相关文章
- KingbaseES V8R3集群运维案例之---用户自定义表空间管理
案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
- KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构
案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...
- KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析
案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...
- kingbaseES V8R3数据安全案例之---审计记录清除案例
案例说明: 对于KingbaseES V8R3数据库,默认用户无权限删除审计记录,只有对审计记录做了转储以后会自动清理审计记录. 适用版本: KingbaseES V8R3 本案例数据库版本: S ...
- KingbaseES V8R3集群维护案例之---在线添加备库管理节点
案例说明: 在KingbaseES V8R3主备流复制的集群中 ,一般有两个节点是集群的管理节点,分为master和standby:如对于一主二备的架构,其中有两个节点是管理节点,三个数据节点:管理节 ...
- KingbaseES V8R3 备份恢复案例之--单实例环境sys_rman脚本备份案例
案例说明: sys_rman是KingbaseES数据库的物理备份工具,支持数据库的全备和增量备份,由于sys_rman工具使用需要配置多个参数,对于一般用户使用不是很方便.为方便用户在Kingbas ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...
- KingbaseES V8R3集群维护案例之---pcp_node_refresh应用
案例说明: 在一次KingbaseES V8R3集群切换分析中,运维人员执行了pcp_node_refresh,导致集群发生了failover的切换.此文档对pcp_node_refresh工具做了应 ...
随机推荐
- 【framework】DisplayContent简介
1 前言 DisplayContent 用于管理屏幕,一块屏幕对应一个 DisplayContent 对象,虽然手机只有一个显示屏,但是可以创建多个 DisplayContent 对象,如投屏时, ...
- spring boot携手echarts实现双柱状图实战
说明 最近做了个图书管理系统,里面有个模块是统计最近一周借书和还书的情况. 设计为柱状图模式展现,自然需要用到echarts. 实现效果 开发步骤 1.页面和JS <!DOCTYPE html& ...
- pyhotn3.8 apt机器基础镜像构建
FROM python:3.8.10-slim RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/source ...
- OpenResty中如何实现,按QPS、时间范围、来源IP进行限流
OpenResty是一个基于Nginx与Lua的高性能Web平台,它通过LuaJIT在Nginx中运行高效的Lua脚本和模块,可以用来处理复杂的网络请求,并且支持各种流量控制和限制的功能. 近期研究在 ...
- XILINX SDK烧录FLASH报错不支持旧版hw_server
最近频繁遇到SDK报错,说是不支持hw_server旧版本,此时打开vivado识别的时候也是一样报错,可能原因是我电脑安装了多个版本的VIVADO导致的,那么怎么解决呢? 打开任务管理器,kill ...
- python部署项目为什么要用Nginx和uWSGI
一.测试运行python项目 1.1 Flask项目 说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替 ...
- 【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
当在Azure 中部署Java应用时候,通常会遇见下列的问题: 如何部署一个Java的项目呢? 部署成功后,怎么来查看Tomcat的服务器信息呢? 如果Azure提供的默认Tomcat版本的配置跟应用 ...
- 二: sql模式(sql_mode)
# sql_mode 1 介绍 sql_mode 会影响 MySQL支持的SQL语法以及它执行的数据验证检查.通过设置sql_mode,可以完成不同严格程度 的数据校验,有效地保障数据准确性. MyS ...
- 俄罗斯套娃 (Matryoshka) 嵌入模型概述
在这篇博客中,我们将向你介绍俄罗斯套娃嵌入的概念,并解释为什么它们很有用.我们将讨论这些模型在理论上是如何训练的,以及你如何使用 Sentence Transformers 来训练它们. 除此之外,我 ...
- 关闭 nginx | taskkill /f /t /im nginx.exe
stop.bat taskkill /f /t /im nginx.exe pause