IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 了解下openGauss的密态支持函数/存储过程 -> 正文阅读

[大数据]了解下openGauss的密态支持函数/存储过程

上期我们介绍了密态查询和使用jdbc连接密态数据库的操作。本期来介绍密态支持函数/存储过程。openGauss 3.0.0版本只支持sql和PL/pgsql两种语言。由于密态支持存储过程中创建和执行函数/存储过程对用户是无感知的,因此使用时语法和非密态无区别。

密态等值查询支持函数存储过程特性新增了系统表gs_encrypted_proc,用于存储参数返回的原始数据类型。下面来看下一些示例。

创建并执行涉及加密列的函数/存储过程

  1. 创建密钥,详细步骤请参考使用gsql操作密态数据库和使用JDBC操作密态数据库

  2. 创建加密表。

openGauss=# CREATE TABLE creditcard_info (
    id_number int,
     name  text,
    credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC)
    ) with (orientation=row);
CREATE TABLE
  1. 插入数据。
openGauss=# insert into creditcard_info values(1, 'Avi', '1234567890123456');
INSERT 0 1
openGauss=# insert into creditcard_info values(2, 'Eli', '2345678901234567');
INSERT 0 1
  1. 创建函数支持密态等值查询。
openGauss=# CREATE FUNCTION f_encrypt_in_sql(val1 text, val2 varchar(19)) RETURNS text AS 'SELECT name from creditcard_info where name=$1 or credit_card=$2 LIMIT 1' LANGUAGE SQL;
CREATE FUNCTION
openGauss=# CREATE FUNCTION f_encrypt_in_plpgsql (val1 text, val2 varchar(19))
RETURNS text AS $$
DECLARE
c text;
BEGIN
 SELECT into c name from creditcard_info where name=$1 or credit_card =$2 LIMIT 1;
  RETURN c;
END; $$
LANGUAGE plpgsql;
CREATE FUNCTION
  1. 执行函数。
openGauss=# SELECT f_encrypt_in_sql('Avi','1234567890123456');
 f_encrypt_in_sql
------------------
 Avi
(1 row)
    
openGauss=# SELECT f_encrypt_in_plpgsql('Avi', val2=>'1234567890123456');
 f_encrypt_in_plpgsql
----------------------
 Avi
(1 row)

不过在使用的时候有些注意事项。

  • 函数/存储过程中的“执行动态查询语句”中的查询是在执行过程中编译,因此函数/存储过程中的表名、列名不能在创建阶段未知,输入参数不能用于表名、列名或以任何方式连接。
  • 在RETURNS、IN和OUT的参数中,不支持混合使用加密和非加密类型参数。虽然参数类型都是原始数据类型,但实际类型不同。
  • 对高级包接口中,如dbe_output.print_line()等在服务端打印输出的接口不会做解密操作,加密数据类型在强转成明文原始数据类型时会打印出该数据类型的默认值。
  • 当前版本函数/存储过程的LANGUAGE只支持SQL和PL/pgSQL,不支持C和JAVA等其他过程语言。
  • 不支持在函数/存储过程中执行其他查询加密列的函数/存储过程。
  • 当前版本不支持default、DECLARE中为变量赋予默认值,且不支持对DECLARE中的返回值进行解密,用户可以用执行函数时用输入参数、输出参数来代替使用。
  • 不支持gs_dump对涉及加密列的function进行备份。
  • 不支持在函数/存储过程中创建密钥。
  • 该版本密态函数/存储过程不支持触发器。
  • 密态等值查询函数/存储过程不支持对plpgsql语言对语法进行转义,对于语法主体带有引号的语法CREATE FUNCTION AS ‘语法主体’, 可以用CREATE FUNCTION AS ‘语法主体’ 代替。
  • 不支持在密态等值查询函数/存储过程中执行修改加密列定义的操作,包括创建加密表、添加加密列,由于执行函数是在服务端,客户端没法判断是否是需要刷新缓存,得断开连接后或触发刷新客户端加密列缓存才可以对该列做加密操作。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:19:52  更:2022-05-26 15:20:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:34:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码