openGauss学习笔记-122 openGauss 数据库管理-设置密态等值查询-密态支持函数/存储过程
密态支持函数/存储过程当前版本只支持sql和PL/pgSQL两种语言。由于密态支持存储过程中创建和执行函数/存储过程对用户是无感知的,因此语法和非密态无区别。
密态等值查询支持函数存储过程新增系统表gs_encrypted_proc,用于存储参数返回的原始数据类型。
122.1 创建并执行涉及加密列的函数/存储过程
-
创建密钥,详细步骤请参考使用gsql操作密态数据库和使用JDBC操作密态数据库。
-
创建加密表。
openGauss=# CREATE TABLE creditcard_info ( openGauss(# id_number int, openGauss(# name text, openGauss(# credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC) openGauss(# ) with (orientation=row); CREATE TABLE
-
插入数据。
openGauss=# insert into creditcard_info values(1, 'Avi', '1234567890123456'); INSERT 0 1 openGauss=# insert into creditcard_info values(2, 'Eli', '2345678901234567'); INSERT 0 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), OUT c text) AS $$ openGauss$# BEGIN openGauss$# SELECT into c name from creditcard_info where name=$1 or credit_card =$2 LIMIT 1; openGauss$# END; $$ openGauss-# LANGUAGE plpgsql; CREATE FUNCTION
-
执行函数。
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)