添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

openGauss 的密态支持函数/存储过程

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

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

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

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

blog.csdn.net/GaussDB/art…

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

3.  插入数据

openGauss=# insert into creditcard_info values(1, 'Avi', '1234567890123456');

INSERT 0 1

openGauss=# insert into creditcard_info values(2, 'Eli', '2345678901234567');

INSERT 0 1

4.  创建函数支持密态等值查询。

openGauss=# CREATE FUNCTION f_encrypt_in_sql(val1 text, val2 varchar(19)) RETURNS text AS 'SELECT name from creditcard_info where name= 1 o r c r e d i t c a r d = 1 or credit_card=

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 o r c r e d i t c a r d = 1 or credit_card =

RETURN c;

END; $$

LANGUAGE plpgsql;

CREATE FUNCTION

5.  执行函数。

openGauss=# SELECT f_encrypt_in_sql('Avi','1234567890123456');

f_encrypt_in_sql

(1 row)

openGauss=# SELECT f_encrypt_in_plpgsql('Avi', val2=>'1234567890123456');

f_encrypt_in_plpgsql

(1 row)

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

  • 函数/存储过程中的“执行动态查询语句”中的查询是在执行过程中编译,因此函数/存储过程中的表名、列名不能在创建阶段未知,输入参数不能用于表名、列名或以任何方式连接。
  • 在RETURNS、IN和OUT的参数中,不支持混合使用加密和非加密类型参数。虽然参数类型都是原始数据类型,但实际类型不同。
  • 对高级包接口中,如dbe_output.print_line()等在服务端打印输出的接口不会做解密操作,加密数据类型在强转成明文原始数据类型时会打印出该数据类型的默认值。
  • 当前版本函数/存储过程的LANGUAGE只支持SQL和PL/pgSQL,不支持C和JAVA等其他过程语言。
  • 不支持在函数/存储过程中执行其他查询加密列的函数/存储过程。
  • 当前版本不支持default、DECLARE中为变量赋予默认值,且不支持对DECLARE中的返回值进行解密,用户可以用执行函数时用输入参数、输出参数来代替使用。
  • 不支持gs_dump对涉及加密列的function进行备份。
  • 不支持在函数/存储过程中创建密钥。
  •