openGauss 5.0.0全密态数据库应用小试

前言

openGauss HCIA教材中,安全是一个重要的章节,在实际项目中,随着网络安全和信息安全形势的变化,企业也越来越重视数据库安全。去年在HALP内部进行openGauss培训时,安全特性就被学员们提出来要重点讲解,而全密态等值查询则又是其中重要的一环。根据官网介绍,实际上openGauss在早期的1.0.0版本就引入了全密态等值查询特性,因此下面结合操作举例,尝试对openGauss 5.0.0版本全密态的使用进行介绍,供有需要的同行参考,不当之处并请提出宝贵意见和建议。

一、教材中关于全密态的内容

图片

(教材内容和官网基本一致)

  • 全密态数据库

关于全密态数据库,官网上的介绍如下:

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

参见官网:https://docs.opengauss.org/zh/docs/5.0.0/docs/AboutopenGauss/%E5%85%A8%E5%AF%86%E6%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AD%89%E5%80%BC%E6%9F%A5%E8%AF%A2.html

其重点在于,openGauss对数据的加密是在客户端进行的,如下图所示,才能保证在传输,计算和存储过程中都是密文,及时被破坏者截获或者盗取,也只能看到的是加密数据,避免了数据泄露。

 

通过全密态数据可以保证云数据库的数据安全,攻击者无法从服务端获取有效数据。基于此可以为云服务商赢得客户信任提供技术保障。

二、全密态数据库的应用

全密态数据库的应用大致分为以下几个步骤:密钥创建、加密表创建、全密态等值查询。

1. 密钥创建

  • 确定密钥存储路径

增加环境变量:需要确保计划存放密钥文件的路径存在,且系统创建的数据库用户(本文为omm)有编辑权限,如下图:

简单起见可以用如下语句赋予权限,实际项目中按需赋权,不建议赋予777权限

chmod -R 777 /opt/software/openGauss/
  • 增加环境变量:

export LOCALKMS_FILE_PATH=/opt/software/openGauss

执行完成后查看,生成文件:

图片

GSQL连接全密态数据库

gsql -p 5432 -d postgres -r –C

其中-C表示是打开密态开关。

  • 创建用户密钥。

其中密钥包括CMK和CEK。CMK是主密钥,用于加密CEK;而CEK是数据密钥,用于加密数据。CEK的创建要依赖于CMK,因此要先创建CMK,再创建CEK。

创建CMK:


CREATE CLIENT MASTER KEY ImgCMK WITH (KEY_STORE = localkms, KEY_PATH = "key_path_value", ALGORITHM = RSA_2048);

CREATE CLIENT MASTER KEY

说明:当前KEY_STORE仅支持localkms,ALGORITHM 支持RSA_2048、RSA3072和SM2

创建CEK:


CREATE COLUMN ENCRYPTION KEY ImgCEK WITH VALUES (CLIENT_MASTER_KEY = ImgCMK, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);

CREATE COLUMN ENCRYPTION KEY

图片

重要说明:由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。如果创建CMK时指定SM4算法来加密CEK,则创建CEK时必须指定SM4_SM3算法来加密数据。

  • 查询创建的密钥

SELECT * FROM gs_client_global_keys;

 

 

2. 加密表创建:

  • 创建另外一个数据库用户


create user fishinwater identified by "***********";

(实际密码隐藏掉)

  • 创建加密表:


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 = ImgCEK, encryption_type = DETERMINISTIC));

 

 

 注意:对于需要加密的列要说明 encrypted with ……,其中encryption_type_value的可选值为[ DETERMINISTIC | RANDOMIZED ],本例中选择DETERMINISTIC。

查看上面创建的密态表,可以看到后面两列是加密的:


\d creditcard_info

 需要注意的是当前版本的OpenGauss仅支持按列进行加密,暂不支持按行进行加密。

  • 插入数据:

INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');

INSERT INTO creditcard_info VALUES (2, 'joy','6219985678349800033');

 就不截图了,简单的insert语句而已。

3. 全密态等值查询

  • 打开密态开关

    (enable_ce=1)

打开密态开关即连接时带上“-C”参数,JDBC连接的话,设置参数enable_ce的值为1:

(enable_ce=1)

在当前打开密态开关的情况下,是可以正常查询数据的,如下:

select * from creditcard_info;

 

 也可以在where条件中用加密字段进行查询:

select * from creditcard_info where name = 'joe';

 

  • 关闭密态开关:

gsql -p 5432 -d postgres –r

注意没有带“-C”参数,则查询的数据是密文,且无法在WHERE条件中使用加密列。

如在条件中用到加密列,会报错如下:

 查询到的密文数据:

 

4. 其他数据库用户查询

被赋予了查询权限的用户(本例为fishinwater),即使打开密态开关,也无法查询加密数据,报错如下:

ERROR(CLIENT): failed to decrypt column encryption key

图片

但是只查询非加密列是正常的,篇幅所限就不附图了。

当没有打开密态开关时,查询到的是密文,和创建秘钥的用户不打开密态开关的效果相同,也不再进行附图说明。

需要说明的是,当前版本的全密态数据库的应用仍有较多的约束条件,期待随着版本演进,openGauss对全密态数据库的支持更加强大,具体约束可以参考官网。

https://docs.opengauss.org/zh/docs/5.0.0/docs/AboutopenGauss/%E5%85%A8%E5%AF%86%E6%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AD%89%E5%80%BC%E6%9F%A5%E8%AF%A2.html

结语:

全密态数据库为用户敏感隐私数据的保护提供了更多的一种选择,在信息保护和数据安全越来越重要的今天,将作为openGauss的重要特性,为openGauss的更加壮大提供重要的技术基础。

 

本文内容来自于数据库领域资深技术专家赵锋老师,希望我们的文章正好能解决你的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/397417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【4.1计算机网络】TCP-IP协议簇

目录 1.OSI七层模型2.常见协议及默认端口3.TCP与UDP的区别 1.OSI七层模型 osi七层模型: 1.应用层 2.表示层 3.会话层 4.传输层:TCP为可靠的传输层协议。 5.网络层 6.数据链路层 7.物理层 2.常见协议及默认端口 3.TCP与UDP的区别 例题1. 解析&#xff1…

层级关联,审批人功能

一个需求要求选择一级&#xff0c;下方展示一级的效果 后端给了审批人数据&#xff0c;但是数据需要单独处理 <template><div class"box"><el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"…

AI新工具(20240219) Ollama Windows预览版;谷歌开源的人工智能文件类型识别系统; PopAi是您的个人人工智能工作空间

Ollama Windows preview - Ollama Windows预览版用户可以在本地创建和运行大语言模型&#xff0c;并且支持NVIDIA GPU和现代CPU指令集的硬件加速 Ollama发布了Windows预览版&#xff0c;使用户能够在原生的Windows环境中拉取、运行和创建大语言模型。该版本支持英伟达的GPU&am…

iOS整理 - 关于直播 - 搭建服务端

前言 其实本人一直都想自己简单做一套直播&#xff08;包括移动端和服务端&#xff09;的开发测试&#xff0c;但是之前一直做得比较迷茫。最近偶然间在来了灵感&#xff0c;瞬间解除了我很多疑惑。我会分享出来&#xff0c;希望大家一起研究下。稍后&#xff0c;我完整做好了…

车载氢气浓度传感器为氢能源车保驾护航

最近&#xff0c;车载氢气浓度传感器成为了一个热门话题。作为一名对科技充满热情的汽车爱好者&#xff0c;我自然也对这个话题产生了浓厚的兴趣。那么&#xff0c;车载氢气浓度传感器到底是什么&#xff1f;它又是如何工作的呢&#xff1f;下面就让我为你一一揭秘。 首先&…

PMP考完之后考什么,NPDP值得考吗?

PMP考完之后可以考虑考一个NPDP证书&#xff0c;从事新产品开发相关工作的学习下NPDP是很有必要的~参与新产品开发相关的中高层管理人员&#xff0c;产品团队成员等非常适合学习NPDP。 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理…

java数据结构与算法刷题-----LeetCode155. 最小栈

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;使用辅助最小栈 解题思路&#xff1a;时间复杂度O(1)…

如何搭建一个稳定的服务器集群?

服务器集群能够提供高效、可扩展的计算和存储资源&#xff0c;满足企业不断增长的业务需求。但是&#xff0c;如何搭建一个稳定的服务器集群呢&#xff1f;下面将从多个方面进行介绍。 一、需求分析 在搭建服务器集群之前&#xff0c;首先要进行需求分析&#xff0c;明确集群…

Vue26 内置标签 v-text v-html

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>v-text指令</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script></head><…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇

1.简介 上一篇中&#xff0c;主要是介绍了拖拽的各种方法的理论知识以及实践&#xff0c;今天宏哥讲解和分享一下划取字段操作。例如&#xff1a;需要在一堆log字符中随机划取一段文字&#xff0c;然后右键选择摘取功能。 2.划取字段操作 划取字段操作就是在一段文字中随机选…

qt for python创建UI界面

现在很多库都有用到python,又想使用QT creater创作界面&#xff0c;来使用。 1.使用的版本 使用虚拟机安装Ubuntu22.04&#xff0c;Ubuntu使用命令行安装qt,默认安装的是QT5&#xff0c;不用来回调了&#xff0c;就用系统默认的吧&#xff0c;不然安装工具都要费不少事情。pyt…

新版Java面试专题视频教程——框架篇

新版Java面试专题视频教程——框架篇 框架篇 01-框架篇介绍02-Spring-单例bean是线程安全的吗03-Spring-AOP相关面试题04-Spring-事务失效的场景05-Spring-bean的生命周期5.1 BeanDefinition 06-Spring-bean的循环依赖(循环引用)6.1 一般对象的循环依…

Spring Cloud微服务网关Zuul动态路由配置优化和手动触发路由刷新

一、前文必看 Spring Cloud微服务网关Zuul动态路由配置。在前文中留了两个小坑。在本文将怕它给填了&#xff0c;所以前一篇文章建议看一下。 二、DynamicZuulRouteLocator小优化 在前文中提到&#xff0c;HeartbeatEvent事件会频繁触发&#xff0c;每次都需要去查询数据库。…

云HIS定义,云HIS系统源码,云HIS建设方法,云HIS发展机制

一、重新定义HIS&#xff1a; 传统HIS是基于局域网的医院信息系统&#xff0c;云HIS全称为基于云计算的医疗卫生信息系统&#xff08;Cloud-Based Healthcare Information System&#xff09;&#xff0c;是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按照现代医疗卫…

http前生今世

HTTP/0.9&#xff0c;仅支持GET方法&#xff0c;并且响应中没有HTTP头信息&#xff0c;只有文档内容。 HTTP/1.0增加了对POST方法、状态码、HTTP头信息等的支持&#xff0c;这一版本也是广泛应用的历史性版本。 HTTP/1.1引入了持久连接&#xff08;Persistent Connections&…

照片去除多余人物的方法分享之三分钟教你怎么去除

在拍摄照片时&#xff0c;有时候会遇到照片中有多余的人物&#xff0c;这会影响照片的美观度和主题表达。去除照片中多余的人物&#xff0c;需要采用一些技巧和方法。本文将介绍几种常用的去除照片中多余人物的方法。 一、使用水印云软件去除多余人物 水印云是一款功能强大的图…

[转载]31省市数字经济发展规划(2024版)

近期&#xff0c;国家统计局、国家税务总局、工业和信息化部等部门先后在国新办新闻发布会上发布2023年发展成绩单&#xff0c;其中&#xff0c;数字经济核心产业频频出现在发展成绩单中。 我国数实融合加快推进。根据国家税务总局发布的数据&#xff0c;2023年我国数字经济核…

JAVA高并发——锁的优化

文章目录 1、减少锁持有时间2、减小锁粒度3、用读写分离锁来替换独占锁4、锁分离5、锁粗化 锁是最常用的同步方法之一。在高并发的环境下&#xff0c;激烈的锁竞争会导致程序的性能下降&#xff0c;因此我们有必要讨论一些有关锁的性能的问题&#xff0c;以及一些注意事项&…

vulhub中Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)

Apache Log4j是一个用于Java的日志记录库&#xff0c;其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 1.我们使用ysoserial生成payload&#xff0c;然后直接发送给your-ip:4712端口即可。 java -jar ysoserial-…

微软和OpenAI将检查AI聊天记录,以寻找恶意账户

据国外媒体报道&#xff0c;大型科技公司及其附属的网络安全、人工智能产品很可能会推出类似的安全研究&#xff0c;尽管这会引起用户极度地隐私担忧。大型语言模型被要求提供情报机构信息&#xff0c;并用于帮助修复脚本错误和开发代码以侵入系统&#xff0c;这将很可能会成为…