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

以下所有的用例都是基于KingbaseES V8R6版本进行过测试。

一、配置透明加密

V8R6数据库内置加密算法支持sm4 和rc4,数据库在初始化时通过 -e 选项指定默认透明加密算法。没指定情况下,默认是sm4。

initdb -D data -USYSTEM -e sm4

加载加密库文件

shared_preload_libraries = 'sysencrypt'

打开钱包:创建加密表空间,必须要求钱包打开状态。建表时,wallet 可以是关闭状态,不影响加密使用。Oracle 创建及访问加密表空间的表,要求wallet 必须是打开的。

test=# openup wallet with password "123456" ;
OPEN WALLET
test=# closeup wallet with password "123456" ;
CLOSE WALLET
test=# alter wallet with password "Kingbase";
ALTER WALLET
test=# openup wallet with password "Kingbase" ;
OPEN WALLET

创建加密表空间

test=# CREATE TABLESPACE ENC_TS LOCATION '/data/tbs01' with (encryption = true);
CREATE TABLESPACE
test=# select * from pg_tablespace;
oid | spcname | spcowner | spcacl | spcoptions
-------+-------------+----------+--------+-------------------
1663 | sys_default | 10 | |
1664 | sys_global | 10 | |
1986 | sysaudit | 10 | |
71438 | enc_ts | 10 | | {encryption=true}
(4 rows)

二、数据表加密结果验证

1、创建数据表

test=# create table t1_encrypt(id integer) tablespace ENC_TS;
CREATE TABLE
test=# insert into t1_encrypt select generate_series(1,100);
INSERT 0 100
test=# create table t1_noencrypt(id integer);
CREATE TABLE
test=# insert into t1_noencrypt select generate_series(1,100);
INSERT 0 100 test=# select tablename,tablespace from pg_tables where tablename in ('t1_encrypt','t1_noencrypt');
tablename | tablespace
--------------+------------
t1_encrypt | enc_ts
t1_noencrypt |
(2 rows) test=# select relname,reltablespace,relfilenode from pg_class where relname in ('t1_encrypt','t1_noencrypt');
relname | reltablespace | relfilenode
--------------+---------------+-------------
t1_encrypt | 71438 | 71439
t1_noencrypt | 0 | 71442
(2 rows)

2、验证加密结果

非加密表:

[kingbase@dbhost03 ~]$ hexdump -c /data/kbdata/base/61904/71442
0000000 \0 \0 \0 \0 030 ) - 224 \0 \0 \0 \0 250 001 200 023
0000010 \0 004 \0 \0 \0 \0 340 237 8 \0 300 237 8 \0
0000020 240 237 8 \0 200 237 8 \0 ` 237 8 \0 @ 237 8 \0
0000030 237 8 \0 \0 237 8 \0 340 236 8 \0 300 236 8 \0
0000040 240 236 8 \0 200 236 8 \0 ` 236 8 \0 @ 236 8 \0
0000050 236 8 \0 \0 236 8 \0 340 235 8 \0 300 235 8 \0
0000060 240 235 8 \0 200 235 8 \0 ` 235 8 \0 @ 235 8 \0
0000070 235 8 \0 \0 235 8 \0 340 234 8 \0 300 234 8 \0
0000080 240 234 8 \0 200 234 8 \0 ` 234 8 \0 @ 234 8 \0
0000090 234 8 \0 \0 234 8 \0 340 233 8 \0 300 233 8 \0
00000a0 240 233 8 \0 200 233 8 \0 ` 233 8 \0 @ 233 8 \0
00000b0 233 8 \0 \0 233 8 \0 340 232 8 \0 300 232 8 \0
00000c0 240 232 8 \0 200 232 8 \0 ` 232 8 \0 @ 232 8 \0
00000d0 232 8 \0 \0 232 8 \0 340 231 8 \0 300 231 8 \0
00000e0 240 231 8 \0 200 231 8 \0 ` 231 8 \0 @ 231 8 \0

加密表:

[kingbase@dbhost03 61904]$ hexdump -c 71439
0000000 \0 \0 \0 \0 H 345 , 224 \0 \0 \0 \0 250 001 200 023
0000010 \0 004 \0 \0 \0 \0 340 237 8 \0 300 237 8 \0
0000020 030 035 ` 330 221 } 200 v H p 334 315 264 - T
0000030 321 " ! 333 254 347 331 c 322 306 ( P 373 301 216 \
0000040 p J * 270 243 351 331 334 205 035 207 221 322 202 " 355
0000050 270 267 4 312 F H 355 \n 273 C 004 d > 267 307 271
0000060 i B 276 ~ m o 202 222 317 \b b K 1 310 317 213
0000070 250 n 252 277 ! * 322 213 > X 323 246 V 261 177 ,
0000080 035 364 221 i 267 334 332 342 374 E y 270 p 373 276 1
0000090 353 j 241 024 216 275 027 243 a 335 * 0 350 301 271 035
00000a0 241 335 250 337 v 305 d W 262 305 365 W 270 ' 3 206
00000b0 301 222 M F c ( 360 035 216 347 ` g ` 321 220 W
00000c0 243 345 ^ 321 V : 252 331 274 030 274 ( 301 x 250 \v

结果:加密的表hexdump 结果是加密的。

三、指定表空间加密密钥

创建加密表空间时,可以指定加密密钥。enckey可以不指定,系统默认分配或者申请,若指定,就用这个密钥。

CREATE TABLESPACE ENC_TS LOCATION '/data/tbs01' with (encryption = true, enckey = 'kb123456');

Note:这个加密密钥对于用户来说是透明的,enckey 是系统内部使用的,实际上没有必要,不建议用户指定。

KingbaseES 表空间加密-透明加密的更多相关文章

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

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

  2. MySQL5.7表空间加密

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

  3. mysql表空间加密 keyring encryption

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

  4. 10. InnoDB表空间加密

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

  5. MySQL InnoDB表空间加密

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

  6. ORACLE透明加密

    --官网文档:https://www.oracle.com/technetwork/cn/tutorials/tde-096009-zhs.html#t概述Oracle 数据库 10g 第 2 版透明 ...

  7. SqlServer2008数据库透明加密

    前几天研究了一下sql数据库的透明加密,记下来加深一下理解. 用脚本创建文件夹 --查文件夹有没有 EXEC master.dbo.xp_fileexist 'D:\DATA\storedcerts' ...

  8. hadoop 透明加密

    hadoop 透明加密 hadoop 透明加密 kms transparent 2015年04月09日 18:12:20 糖糖_ 阅读数:12248 标签: transparenthadoop kms ...

  9. KingbaseES V8R3集群运维案例之---用户自定义表空间管理

    ​案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...

随机推荐

  1. 方法重载、方法重写、四种权限修饰、JavaBean、代码块

    方法重载(overload) 一个类中可以含有多个重名的方法. 两同一不同 ①同一个类 ②同一个方法名 ③不同参数列表:参数个数不同,参数类型不同 方法重写(override) ①子类重写的方法的修饰 ...

  2. sed基本使用

    1. 删除由空格组成的空白行 sed '/^ *$/d' test.txt sed '/[ ][ ]/d' test.txt 2. 删除空白行 sed '/^[[:space:]]*$/d' test ...

  3. STM32 移植 RT-Thread 标准版的 FinSH 组件

    一.移植准备 开发版STM32F10xC8T6 准备好移植RT-Thread的移植工程 没动手移植过RT-Thread的小伙伴,可以看RT-Thread移植到stm32 我这里是将控制台信息打印到串口 ...

  4. NC14380 位数差

    NC14380 位数差 题目 题目描述 给一个数组 \({a}\) ,定义 \(h(a,b)\) 为在十进制下 \(a + b\) 与 \(a\) 的位数差,求 \(\displaystyle\sum ...

  5. 漫谈客户端存储技术之Cookie篇

    Cookie 说到Cookie,不管作为前端开发人员还是后端开发人员并不陌生,作为一种最古老.最稳定的客户端存储形式,即便是在当下各种新的客户端存储技术层出不穷的时代,它仍旧有其一席之位.Cookie ...

  6. docker下node环境搭建

    初始化⼀个NodeJs程序 以下操作必须已经安装了NodeJS. ⾸先创建⼀个空⽂件夹.并创建以下⽂件: server.js package.json Dockerfile .dockerignore ...

  7. Note -「Dijkstra 求解 MCMF」

    食用前请先了解 SPFA + Dinic/EK 求解 MCMF. Sol. 总所周知,SPFA 牺牲了.于是我们寻求一些更稳定的算法求解 MCMF. 网络流算法的时间属于玄学,暂且判定为混乱中的稳定. ...

  8. SPFA算法(SLF优化)2022.7.8更新

    SPFA可能会被卡掉,能用dijkstra就别用SPFA,代码较长,但我已尽力做到解释,请耐心看下去,存储为邻接表存储. #include<bits/stdc++.h> #define i ...

  9. 9. 利用Docker快速构建MGR | 深入浅出MGR

    目录 1.安装Docker 2.拉取GreatSQL镜像,并创建容器 2.1 拉取镜像 2.2 创建新容器 2.3 容器管理 3.构建MGR集群 3.1 创建专用子网 3.2 创建3个新容器 3.3 ...

  10. 使用.NET简单实现一个Redis的高性能克隆版(三)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...