一文汇总全密态数据库的基本使用方法

一.全密态数据库特性简介

全密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成数据加密并发送给服务端后,在攻击者借助系统脆弱点窃取用户数据的状态下仍然无法获得有效的价值信息,从而起到保护数据隐私的能力。

二. 全密态数据库的客户价值

由于整个业务数据流在数据处理过程中都是以密文形态存在,通过全密态数据库,可以实现:

  1. 保护数据在云上全生命周期的隐私安全,无论数据处于何种状态,攻击者都无法从数据库服务端获取有效信息。

  2. 帮助云服务提供商获取第三方信任,无论是企业服务场景下的业务管理员、运维管理员,还是消费者云业务下的应用开发者,用户通过将密钥掌握在自己手上,使得高权限用户无法获取数据有效信息。

  3. 让云数据库服务借助全密态能力更好的遵守个人隐私保护方面的法律法规。

三.全密态数据库的使用

全密态数据库目前支持两种连接方式:gsql连接和jdbc连接。本章将从四个步骤详细介绍两种连接方式下,数据库的使用流程。

3.1连接全密态数据库

1.GSQL连接数据库执行以下命令打开密态开关:gsql -p PORT –d postgres -r –C

参数说明

-p端口号,-d数据库名称 –C是打开密态开关。

2.JDBC支持密态数据库相关操作,需要设置enable_ce=1

三.全密态数据库的使用

全密态数据库目前支持两种连接方式:gsql连接和jdbc连接。本章将从四个步骤详细介绍两种连接方式下,数据库的使用流程。

3.1连接全密态数据库

1.GSQL连接数据库执行以下命令打开密态开关:gsql -p PORT –d postgres -r –C

参数说明

-p端口号,-d数据库名称 –C是打开密态开关。

2.JDBC支持密态数据库相关操作,需要设置enable_ce=1

3.2创建用户密钥

全密态数据库有两种密钥,即客户端主密钥CMK和数据加密密钥CEK。CMK用于加密CEK,CEK用于加密用户数据。

在创建密钥之前,首先要使用gs_ktool工具创建密钥ID,此ID用于创建客户端主密钥CMK:

openGauss=# \! gs_ktool -g

密钥创建的顺序和依赖依次为:创建密钥IDà创建CMKà创建CEK。

1. GSQL环境下创建CMK和CEK:

【创建CMK】

参数说明

CREATE CLIENT MASTER KEY

client_master_key_name WITH (KEY_STORE =

key_store_name, KEY_PATH = "key_path_value",

ALGORITHM = algorithm_type);

• client_master_key_name

该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。

取值范围:字符串,需符合标识符的命名规范。

• KEY_STORE

独立管理密钥的工具/服务。目前,仅支持由GaussDB Kenel提供的密钥管理工具gs_ktool,以及由华为云提供的在线密钥管理服务huawei_kms。取值范围为:gs_ktool,huawei_kms。

• KEY_PATH

用于指定密钥管理工具/服务中的一个密钥。通过KEY_STORE和KEY_PATH参数可唯一确定一个密钥实体。当KEY_STORE = gs_ktool时,取值范围为:gs_ktool/KEY_ID;当KEY_STORE = huawei_kms时,取值范围为:36字节的密钥ID。

• ALGORITHM

用于指定该密钥实体将用于何种加密算法。当KEY_STORE = gs_ktool时,取值范围为:AES_256_CBC,SM4;当KEY_STORE = huawei_kms时,取值为:AES_256。

【创建CEK】

CREATE COLUMN ENCRYPTION KEY column_encryption_key_name

WITH(CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type,

ENCRYPTED_VALUE = encrypted_value);


参数说明

• column_encryption_key_name

该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。

取值范围:字符串,要符合标识符的命名规范。

• CLIENT_MASTER_KEY

指定用于加密本CEK的CMK,取值为:CMK对象名,该CMK对象由CREATE CLIENT MASTER KEY语法创建。

• ALGORITHM

指定该CEK将用于何种加密算法,取值范围为:AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256和SM4_SM3;

• ENCRYPTED_VALUE(可选项)

该值为用户指定的密钥口令,密钥口令长度范围为28 ~ 256位,28位派生出来的密钥安全强度满足AES128,若用户需要用AES256,密钥口令的长度需要39位,如果不指定,则会自动生成256比特的密钥。

说明:

由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。即如果将CEK用于SM4_SM3算法,则仅能使用SM4算法来对该CEK进行加密。

【示例:GSQL环境下:】

--(1)使用密钥管理工具gs_ktool创建密钥,该工具会返回新生成的密钥的ID[cmd] gs_ktool -g--

(2) 使用特权账户,创建一个普通用户alice。openGauss=# CREATE USER alice PASSWORD '********';--

(3)使用普通用户alice的账户,连接密态数据库,并执行本语法gsql -p 57101 postgres -U alice -r -C-- 创建客户端加密主密钥(CMK)对象openGauss=> CREATE CLIENT MASTER KEY alice_cmk WITH ( KEY_STORE = gs_ktool , KEY_PATH = "gs_ktool/1" , ALGORITHM = AES_256_CBC);-- 创建客户端列加密密钥(CEK)对象openGauss=> CREATE COLUMN ENCRYPTION KEY a_cek WITH VALUES (CLIENT_MASTER_KEY = a_cmk, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);openGauss=> CREATE COLUMN ENCRYPTION KEY another_cek WITH VALUES (CLIENT_MASTER_KEY = a_cmk, ALGORITHM = SM4_SM3);

2. JDBC环境下创建CMK和CEK:

// 创建客户端主密钥Connection conn = DriverManager.getConnection("url","user","password");Statement stmt = conn.createStatement();int rc = stmt.executeUpdate("CREATE CLIENT MASTER KEY ImgCMK1 WITH ( KEY_STORE = gs_ktool , KEY_PATH = \"gs_ktool/1\" , ALGORITHM = AES_256_CBC);");
// 创建列加密密钥int rc2 = stmt.executeUpdate("CREATE COLUMN ENCRYPTION KEY ImgCEK1 WITH VALUES (CLIENT_MASTER_KEY = ImgCMK1, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);");

3.3创建加密表

在创建了客户端主密钥CMK和数据加密密钥CEK之后,就可以使用CEK创建加密表了。加密表的创建支持对加密列进行随机加密和确定性加密两种· 123··方式。

1. GSQL连接环境下创建加密表:

【示例】

openGauss=# CREATE TABLE creditcard_info (id_number int, name text encrypted with (column_encryption_key = ImgCEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC));

参数说明

ENCRYPTION_TYPE为ENCRYPTED WITH约束中的加密类型,encryption_type_value的值为[ DETERMINISTIC | RANDOMIZED ]。

2. JDBC环境下创建加密表:

int rc3 = stmt.executeUpdate("CREATE TABLE creditcard_info (id_number int, name varchar(50) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC));");

3.4向加密表插入数据并进行查询

创建了加密表以后,可以在密态数据库模式下(连接参数-C)向加密表中插入数据、查看数据。当使用普通环境(关掉连接参数-C)时,是无法对加密表进行操作的,查看加密表时也只能看到密文数据。

1. GSQL环境下向加密表插入数据并查看:

openGauss=# INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');INSERT 0 1openGauss=# INSERT INTO creditcard_info VALUES (2, 'joy','6219985678349800033');INSERT 0 1openGauss=# select * from creditcard_info where name = 'joe'; id_number | name | credit_card-----------+------+--------------------- 1 | joe | 6217986500001288393(1 row)

注意:使用非密态客户端查看该加密表数据时是密文

openGauss=# select id_number,name from creditcard_info; id_number | name-----------+------------------------------------------- 1 | \x011aefabd754ded0a536a96664790622487c4d36 2 | \x011aefabd76853108eb406c0f90e7c773b71648f(2 rows)

2. JDBC环境下向加密表插入数据并查看:

// 插入数据int rc4 = stmt.executeUpdate("INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');");// 查询加密表ResultSet rs = null;rs = stmt.executeQuery("select * from creditcard_info where name = 'joe';");// 关闭语句对象stmt.close();

上述我们列出的是全密态数据库特性的基本使用方法,更全面的使用介绍,可以参考官方文档中的对应章节。但对于普通用户来说,上述介绍的功能足以保证日常工作的顺利开展。后续,全密态数据库也会沿着更加易用、更高的性能进行演进,也欢迎大家持续关注!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 介绍: 使用SQLite数据库的时候,有时候对于数据库要求比较高,特别是在iOS8.3之前,未越狱的系统也可以通过...
    farawei阅读 5,019评论 2 51
  • 面向对象的三大特征 封装把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的信...
    im青禾阅读 2,580评论 10 75
  • 随着数字化技术的飞速发展,数字、连接、信号、人工智能充斥着人们工作、生活的各个领域。这些数字化信息被快速转换成数据...
    码农Kkio阅读 619评论 0 1
  • 开放平台API接口安全策略汇总 在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,本文对接口加密及签名...
    飞天猪Pony阅读 1,035评论 0 1
  • 1:描述tcp/udp的区别及优劣,及其发展前景 TCP 建立连接 完整性强 速度慢—当数据传输的性能必须让位于数...
    Triplesc阅读 1,650评论 0 1