云小课|使用SQL加密函数实现数据列的加解密

news2025/3/3 4:37:16
摘要:数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用。作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加密。

本文分享自华为云社区《看GaussDB(DWS)如何使用SQL加密函数实现数据列加解密》,作者:Hello EI。

数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用。作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加密。这里主要讨论SQL函数加密。

GaussDB(DWS)目前不支持从Oracle、Teradata和MySQL加密后到DWS解密。Oracle、Teradata和MySQL与DWS加解密有区别,需要非加密数据迁移到DWS后在DWS侧进行加解密。

技术背景

  • 哈希函数

哈希函数又称为摘要算法,对于数据data,Hash函数会生成固定长度的数据,即Hash(data)=result。这个过程是不可逆的,即Hash函数不存在反函数,无法由result得到data。在不应保存明文场景(比如口令password属于敏感信息),系统管理员用户也不应该知道用户的明文口令,就应该使用哈希算法存储口令的单向哈希值。

实际使用中会加入盐值和迭代次数,避免相同口令生成相同的哈希值,以防止彩虹表攻击。

图1 哈希函数

  • 对称密码算法

对称密码算法使用相同的密钥来加密和解密数据。对称密码算法分为分组密码算法和流密码算法。

分组密码算法将明文分成固定长度的分组,用密钥对每个分组加密。由于分组长度固定,当明文长度不是分组长度的整数倍时,会对明文做填充处理。由于填充的存在,分组密码算法得到的密文长度会大于明文长度。

流加密算法是指加密和解密双方使用相同伪随机加密数据流作为密钥,明文数据依次与密钥数据流顺次对应加密,得到密文数据流。实践中数据通常是一个位(bit)并用异或(xor)操作加密。流密码算法不需要填充,得到的密文长度等于明文长度。

图2 对称密码算法

技术实现

GaussDB(DWS)主要提供了哈希函数和对称密码算法来实现对数据列的加解密。哈希函数支持sha256,sha384,sha512和国密sm3。对称密码算法支持aes128,aes192,aes256和国密sm4。

哈希函数

  • md5(string)

将string使用MD5加密,并以16进制数作为返回值。MD5的安全性较低,不建议使用。

  • gs_hash(hashstr, hashmethod)

以hashmethod算法对hashstr字符串进行信息摘要,返回信息摘要字符串。支持的hashmethod:sha256, sha384, sha512, sm3。

SELECT gs_hash('GaussDB(DWS)', 'sha256');
 gs_hash 
--------------------------------------------------------------------------------------------------
 e59069daa6541ae20af7c747662702c731b26b8abd7a788f4d15611aa0db608efdbb5587ba90789a983f85dd51766609
(1 row)

对称密码算法

  • gs_encrypt(encryptstr, keystr, cryptotype, cryptomode, hashmethod)

采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。

SELECT gs_encrypt('GaussDB(DWS)', '1234', 'aes128', 'cbc', 'sha256');
 gs_encrypt 
--------------------------------------------------------------------------------------------------------------------------
 AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA==
(1 row)
  • gs_decrypt(decryptstr, keystr,cryptotype, cryptomode, hashmethod)

采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。

SELECT gs_decrypt('AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA==', '1234', 'aes128', 'cbc', 'sha256');
 gs_decrypt 
--------------
 GaussDB(DWS)
(1 row)
  • gs_encrypt_aes128(encryptstr,keystr)

以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。keystr的长度范围为1~16字节。

SELECT gs_encrypt_aes128('MPPDB','1234');
                               gs_encrypt_aes128
-------------------------------------------------------------------------------------
gwditQLQG8NhFw4OuoKhhQJoXojhFlYkjeG0aYdSCtLCnIUgkNwvYI04KbuhmcGZp8jWizBdR1vU9CspjuzI0lbz12A=
(1 row)
  • gs_decrypt_aes128(decryptstr,keystr)

以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。keystr不得为空。

SELECT gs_decrypt_aes128('gwditQLQG8NhFw4OuoKhhQJoXojhFlYkjeG0aYdSCtLCnIUgkNwvYI04KbuhmcGZp8jWizBdR1vU9CspjuzI0lbz12A=','1234');
 gs_decrypt_aes128 
-------------------
 MPPDB
(1 row)

应用示例

创建表student,有id,name和score三个属性。使用哈希函数加密保存name,使用对称密码算法保存score。

CREATE TABLE student (id int, name text, score text, subject text);
CREATE TABLE
INSERT INTO student VALUES (1, gs_hash('alice', 'sha256'), gs_encrypt('95', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('math', '1234'));
INSERT 0 1
INSERT INTO student VALUES (2, gs_hash('bob', 'sha256'), gs_encrypt('92', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('english', '1234'));
INSERT 0 1
INSERT INTO student VALUES (3, gs_hash('peter', 'sha256'), gs_encrypt('98', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('science', '1234'));
INSERT 0 1

不使用密钥查询表student,通过查询结果可知:没有密钥的用户即使拥有了select权限也无法看到name和score这两列加密数据。

SELECT * FROM STUDENT;
 id |                               name                               |                                                          score                                                           |
                               subject
----+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+------------
----------------------------------------------------------------------------------
 2 | 81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9 | AAAAAAAAAACCWNznqIVSGYgcuDz9jNKTHTd35+Jmhd/8j6zRLTfAa+Yl448SxNUsDTOBtW4w2ePmnqwf2FfbfsF3hYYlOlCQV/BSv2M3fQKKUwc0Ytunug== | Ti4Shb5N511
imwH8ugtiveRiSF6j7SC8OyUK/DQRPRRwwW9MFXPnGbG6jOMhMSMpKiz3NoEGOaT384aywVgI31MS3Z8=
 3 | 026ad9b14a7453b7488daa0c6acbc258b1506f52c441c7c465474c1a564394ff | AAAAAAAAAAClDZIa1LfJuG+2dHpbnxn7VwHkCFuHChKErh069OHnMR+rhpWk0TxWlRfq8NIjX+590C3MqhPtha0ERbHbDpr5z8XVMkLgyAOQzJf6XtXvOA== | ijHXT/z94Zf
MKQ0k7fYDCUML7ZeU15tLXQreBwp0borh/pgB4ifh8j032v7IiENbHqnRdfRDgkrQDHswu5ZDb3Op3vE=
 1 | 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 | AAAAAAAAAACQF3OcOktEKkPEL6G/AKL7DVA9WeXiNOwPPcXZuk49GZq0mrtR1ebqIiZBCvmGJ4wqoa7WEo3w8PRw+CK1oFP8J3b51ZZTVf1HD3nS46uEeg== | Sq5Zi0Yhg6h
/hEcLD8bJqmpGKVkr0Ke4SKHqf7xBMqWflZjXeFvE9s7CUMvXzJ0uSg7P5Ta1CT4sm0vvB1fc+84o+7o=
(3 rows)

使用密钥查询表student,通过查询结果可知:拥有密钥的用户通过使用gs_encrypt对应的解密函数gs_decrypt解密后,可以查看加密数据。

SELECT id, gs_decrypt(score, '12345', 'aes128', 'cbc', 'sha256'),gs_decrypt_aes128(subject, '1234') FROM STUDENT;
 id | gs_decrypt | gs_decrypt_aes128
----+------------+-------------------
 2 | 92 | english
 3 | 98 | science
 1 | 95 | math
(3 rows)

点击关注,第一时间了解华为云新鲜技术~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电感单位亨利H单位换算

1H 1e-18EH 1e-15PH 1e-12TH 1e-9GH 1e-6MH 0.001kH 1H 1,000mH 1,000,000uH 1,000,000,000nH 1,000,000,000,000pH 1,000,000,000,000,000fH 在线H亨利单位换算 (toolxq.com)http://www.toolxq.com/front/tools/trans/unit/H 亨利是电感的国际单位制导出单位,符…

2022年《微信小程序从基础到uni-app项目实战》

教程推荐:黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_ 一、起步 1 uni-app 简介 uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、And…

Word不计算封面、目录页数将正文页码修改为第几页共几页的格式

本文介绍在Word文档中,不考虑封面、目录、前言等的页数,为正文添加“第X页,共X页”样式页码的方法。 在Word中,我们可以双击页眉或页脚部分,选择“页码”选项并添加页码。 其中,可以添加如下图所示形式的页…

Nginx配置虚拟主机

虚拟主机指的是,在一台服务器中,我们使用Nginx,来配置多个网站。 如何区分不同的网站: 端口不同域名不同 1、通过端口区分不同的虚拟主机 1.1、Nginx配置文件 (1)Nginx配置文件的位置 cd /usr/local/nginx/conf nginx.conf 就是Nginx的配置文件 &a…

Docker学习

Docker学习 Docker概述 Docker安装 Docker命令 Docker镜像 Docker的数据卷 DockerFile Docker网络原理 IDEA整合Docker 集群-Docker Compose Docker Swarm CI\CD jenkins Docker概述 安装教程:(https://docs.docker.com/engine/install/centos/) 文档…

CSS初阶语法

CSS初阶语法 文章目录CSS初阶语法1.CSS介绍2.CSS引入方式3.CSS基础选择器3.1 标签选择器(标签名字)3.2 类选择器(class)3.3 id选择器(id)3.4 通配符选择器(*)4.文字基本样式4.1 字体样式(font-size、font-weight、font-style、font-family、font)4.2 文本样式(text-indent、tex…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.1 第三方bean 属性绑定

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.1 第三方bean 属性绑定2.1.1 ConfigurationProperties2.…

ERP系统有哪些品牌?

企业资源规划 (ERP) 系统可以帮助企业在一个系统中管理其整个运营。凭借 CRM、人力资源、会计、供应链管理等功能,优秀的 ERP 系统可以集中并简化每位员工的日常工作。 那么,ERP系统有哪些品牌?哪个好用?下面就来简单介绍几个主流…

Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、移动数据格式JSON 网络通信的交互数据格式有两大类,分别是JSON和XML,前者短小精悍,后者表现力丰富,对于App来说,基本采用JSON格式与服务器通信。一是手机流量…

计算机网络的常见面试题

GET 和 POST 的区别 作用 GET用来获取资源,POST用于传输实体主体 参数位置 GET的参数放在URL中,POST的参数存储在实体主体中,并且GET方法提交的请求的URL中的数据多是2048字节,POST请求没有大小限制 安全性 GET方法因为参数放在…

二极管:Irush与我相干!

故事还没结束,我们必须继续讲,继续挖,边说边究。 即使时间us级不会让FUSE同学Open,FUSE后面的兄弟姐妹呢,可以扛住事吗?那可有3.4A的能量冲击啊! 不确定,就有可能。墨菲老人家曾说过:会出错的事总会出错。也就是会发生的事总会发生,只要不给时间加上一个期限,非要给…

外卖项目03---分类管理业务开发

目录 一、公共字段自动填充 41 1.1问题分析 41 ​编辑1.2公共字段自动填充---代码实现并测试 42 1.3公共字段自动填充---功能完善 43 二、新增分类 44 2.1需求分析 44 三、分类信息查询 45 3.1需求分析 45 3.2代码开发 流程分析 四、删除分类 46 4.1需求分析 46 4.2…

教你打造高性能的 Go 缓存库

我在看一些优秀的开源库的时候看到一个有意思的缓存库 fastcache,在它的介绍主要有以下几点特点: 读写数据要快,即使在并发下;即使在数 GB 的缓存中,也要保持很好的性能,以及尽可能减少 GC 次数&#xff1…

基于Fluent求解器进行二次开发到底怎么做?

作者 | 小田老师 Ansys Fluent软件作为通用的流体仿真软件,功能模型虽然多而全,但是缺乏相应的行业专业性。同时仿真分析具有一定的技术门槛,既需要技术人员具备行业基础,也需要积累相关仿真经验,对软件操作要有较高的…

Docker安装Redis

文章目录1.Docker搜索Redis镜像2.Docker拉取镜像3.Docker挂载配置文件4.启动Redis 容器5.测试Redis6.Docker删除Redis1.Docker搜索Redis镜像 命令&#xff1a;docker search <镜像名称> docker search redis可以看到有很多redis的镜像&#xff0c;此处因没有指定版本&…

干货|数据安全治理白皮书4.0(文末附下载链接)

数据安全治理白皮书是国内最早的数据安全治理白皮书系列&#xff0c;围绕数据安全治理&#xff0c;“新理论、新技术、新实践”&#xff0c;一次系统汇总、梳理分析与集中呈现&#xff0c;2018年-2021年&#xff0c;已发布1.0/2.0/3.0三个版本&#xff0c;2022年&#xff0c;已…

线性二分类的实现

神经网络结构 从视觉上判断是线性可分的&#xff0c;使用单层神经网络&#xff1b; 输入层设置两个输入单元&#xff0c;表示经纬度&#xff1a;&#x1d44b;&#x1d465;1,&#x1d465;2 输出层设置一个单元&#xff0c;表示地盘所属阵营&#xff1a; &#x1d467;&…

STC15W单片机防丢语音报警GPS北斗定位测距双机LORA无线手持可充电

实践制作DIY- GC0091-防丢语音报警 一、功能说明&#xff1a; 基于STC15W单片机设计-防丢语音报警 功能介绍&#xff1a; 主机硬件&#xff1a; STC15W4K48S4&#xff08;或者STM32F103CxT6&#xff09;系列最小系统板OLED显示器LORA无线通讯模块GPS北斗双模定位模块蜂鸣器…

RGD环肽:环六肽c(GRGDSP),CAS号: 135432-37-0

c(GRGDSP)是一个环RGD肽。刺激大鼠传入小动脉的收缩。已用于顺铂的靶向给药。结果表明&#xff0c;c(RGDSP)可抑制小鼠B16黑色素瘤细胞在纤连蛋白包被孔上的粘附。 编号: 194990中文名称: RGD环肽&#xff1a;环六肽c(GRGDSP)英文名: cyclo(GRGDSP)CAS号: 135432-37-0单字母: c…

电子统计台账:中文标记月度流水账格式数据的转换,以及过滤模板的普遍适配性

上一个例子展示的台账格式中&#xff0c;月份是阿拉伯数字。本文试着转换中文月份格式的台账数据。 1 新建项目 新建一个项目“测试06_工业生产_中文月度流水账_202101”。 切换到2021年1月。 2 打开数据源文件 打开2个企业数据源文件&#xff1a; 6流水账式中文月份M_1-…