说明:

数据库系统使用过程中,有些业务功能在特殊的安全级别情况下,需要对数据库中的函数和存储过程进行加密存储,以保证数据库函数和过程的代码安全性。KingbaseES 数据库,提供了DBMS_DDL扩展插件功能,帮助对数据库中的函数和存储过程进行加密存储。

ddms_ddl扩展介绍:

DBMS_DDL是KingbaseES的一个扩展插件,主要用于创建一个PL/SQL函数、过程。DBMS_DDL系统自带扩展,不需要单独创建。

DBMS_DDL拓展插件不支持PG模式。

ddms_ddl扩展:

DBMS_DDL拓展插件内容:

test=# \dx+ dbms_ddl
对象用于扩展 "dbms_ddl"
对象描述
---------------------------
function wrapped(varchar)
package dbms_ddl
(2 行记录)
DBMS_DDL.WRAP

只加密不执行语句。函数WRAP以CREATE [ OR REPLACE ]语句作为输入,指定创建PL/SQL函数、过程。并返回CREATE [ OR REPLACE ]后面语句的加密语句。

语法格式:

DBMS_DDL.WRAP(ddl VARCHAR2)RETURN VARCHAR2;

参数说明:

ddl:指定用于创建一个PL/SQL包体、函数、过程的CREATE [ OR REPLACE ]语句。

返回值:

返回32k字节以内已加密的字符串。

DBMS_DDL.CREATE_WRAPPED

加密并执行语句。

语法格式

DBMS_DDL.CREATE_WRAPPED(ddl VARCHAR2);

参数说明:

ddl:指定用于创建一个PL/SQL函数、过程的CREATE [ OR REPLACE ]语句。

ddms_ddl示例:

DBMS_DDL.WRAP加密函数体
test=# select dbms_ddl.wrap(
test(# q'[
test'# CREATE PROCEDURE getValue(pid int) AS
test'# BEGIN
test'# select now();
test'# RAISE NOTICE 'pid=%',pid;
test'# END ;
test'# ]');
wrap
--------------------------------------------------------------
+
CREATE PROCEDURE getValue(pid int) AS WRAPPED +
Ysyb9n+AUBSMPkhTULtxOjaiiiMoxXYtRVnTlW2f1dJa/DnOklEoLqQyyouJ+
2oiVpC/nz/w26eThsPQr5juu3g== +
END;
(1 row)
test=#  select dbms_ddl.wrap(
test(# q'[
test'# CREATE FUNCTION getName(pid int) RETURN VARCHAR2 AS
test'# DECLARE
test'# nam varchar(10);
test'# BEGIN
test'# SELECT 'return='|| to_char(pid) INTO nam FROM dual;
test'# RETURN nam;
test'# EXCEPTION
test'# WHEN no_data_found THEN
test'# RETURN 'NOFUOUND';
test'# WHEN OTHERS THEN
test'# RETURN 'OTHERS';
test'# END ;
test'# ]');
wrap
--------------------------------------------------------------
+
CREATE FUNCTION getname(pid int) RETURN VARCHAR2 AS WRAPPED +
jLdZaVH1HEkWXnhly2vcpWdyh1HhWuG91+ijKCp4cjvAE17MFcj9Meti/eJ9+
P7Giz2aysfFssGzKIYFokBykv1teJ7WJ8/dcoUpWFMgcjJT1slOzvIETLAtJ+
RgIhuXS7UcvJA+And0M7wAqPIcO+hGDVGtrobdjyWEsjj67x6/J/UArN8fy6+
4Kno4qUsLY8Dw7W+BSbAa3Ton60ynUemm6EtjlhQuqucXQVJsFtL1A9LU4vN+
3NlmM1eD0QLZbi7T166n7crOcK4iZcBm3bhVqJbJMrHlfO1y8s+mCGEUIZw=+
END;
(1 行记录)
DBMS_DDL.CREATE_WRAPPED加密并执行函数体
test=# CALL dbms_ddl.CREATE_WRAPPED(
test(# q'[
test'# CREATE PROCEDURE getValue(pid int) AS
test'# BEGIN
test'# select now();
test'# RAISE NOTICE 'pid=%',pid;
test'# END ;
test'# ]');
CALL
test=# \sf getValue
CREATE OR REPLACE PROCEDURE public.getvalue(pid integer)
AS WRAPPED
w5K/gWuBfiREAZ+LBYFLtu01ayNoHgqoSDf9ZtsG+KuFntIAS2i7Zji6CygE
HViaQ1VF6XfYrvHde1cmY2zxqw==
END
test=# CALL dbms_ddl.CREATE_WRAPPED(
test(# q'[
test'# CREATE FUNCTION getName(pid int) RETURN VARCHAR2 AS
test'# DECLARE
test'# nam varchar(10);
test'# BEGIN
test'# SELECT 'return='|| to_char(pid) INTO nam FROM dual;
test'# RETURN nam;
test'# EXCEPTION
test'# WHEN no_data_found THEN
test'# RETURN 'NOFUOUND';
test'# WHEN OTHERS THEN
test'# RETURN 'OTHERS';
test'# END ;
test'# ]');
CALL
test=# \sf getName
CREATE OR REPLACE FUNCTION public.getname(pid integer)
RETURNS varchar
AS WRAPPED
jLdZaVH1HEkWXnhly2vcpWdyh1HhWuG91+ijKCp4cjvAE17MFcj9Meti/eJ9
P7Giz2aysfFssGzKIYFokBykv1teJ7WJ8/dcoUpWFMgcjJT1slOzvIETLAtJ
RgIhuXS7UcvJA+And0M7wAqPIcO+hGDVGtrobdjyWEsjj67x6/J/UArN8fy6
4Kno4qUsLY8Dw7W+BSbAa3Ton60ynUemm6EtjlhQuqucXQVJsFtL1A9LU4vN
3NlmM1eD0QLZbi7T166n7crOcK4iZcBm3bhVqJbJMrHlfO1y8s+mCGEUIZw=
END

加密函数调用

test=# call getValue(110);
注意: pid=110
now
-------------------------------
2022-12-10 14:53:03.645849+08
(1 行记录) CALL
test=# select getName(120);
getname
------------
return=120
(1 行记录)

KingbaseES 函数与存储过程内容加密的更多相关文章

  1. sqlserver自定义函数与存储过程的区别 实例详解

    分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到 ...

  2. (转)对存储过程进行加密和解密(SQL 2008/SQL 2012)

    原文地址:http://www.cnblogs.com/wghao/archive/2012/12/30/2837642.html 开始: 在网络上,看到有SQL Server 2000和SQL Se ...

  3. Mysql导出函数、存储过程

    下面是导出存储过程的代码 1 # mysqldump -u 数据库用户名 -p -n -t -d -R 数据库名 > 文件名 其中,-d 表示--no-create-db, -n表示--no-d ...

  4. mysql中的函数与存储过程

    mysql中的函数:1 mysql下创建函数: 1.1 语法: delimiter $$ -- 设置分隔符,默认是; 设置成其他符号,让编译器知道我们函数编写的结束,此处设置成$$ create fu ...

  5. MySQL自定义函数与存储过程

    1.前置条件 MySQL数据库中存在表user_info,其结构和数据如下: mysql> desc user_info; +-----------+----------+------+---- ...

  6. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

  7. MySQL 视图、触发器、函数、存储过程

    1. 视图 1.1 什么是视图 通俗来讲,视图就是一条 select 语句执行后返回的结果集.所有我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上. 1.2 视图的特性 视图是对若干张基 ...

  8. oracle中函数和存储过程的区别和联系【转载竹沥半夏】

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

  9. PL-SQL 存储函数和存储过程

     PL-SQL 存储函数和存储过程 ORACLE 提供能够把PL/SQL 程序存储在数据库中,并能够在不论什么地方来执行它.这样就叫存储过程或函数. 过程和函数统称为PL/SQL子程序.他们是被命 ...

  10. 描述了say_hello函数的具体内容,调用zend_printf系统函数在php中打印字符串

    下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开详细阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构 ...

随机推荐

  1. ubuntu16.04 ssh启用root连接

    安装好ubuntu16.04 server版默认是不允许客户端ssh工具连接root的. 启用方法如下: 1.设置root密码 dylan@ubuntu:~$ sudo passwd root [su ...

  2. 从 vs 的 rc 文件中获取版本号

    更新项目版本号时,需要与 rc 文件的 version 同步,比较方便的方法是直接从 rc 文件中获取版本号,并应用到程序中 // 删除日志检查 bool GetVersion() { // get ...

  3. FileBeat简单使用

    简介 首先要了解ELK架构 这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工 ...

  4. 项目实战:Qt+OSG三维2D文字实时效果查看工具

    需求   OSG三维中2D文字的基本属性较多,方便实时查看效果,并出对应文本代码.   Demo      工具下载地址   CSDN免积分下载地址:https://download.csdn.net ...

  5. ubuntu18.04更换下载源

    步骤一 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 步骤二 vim /etc/apt/sources.list 步骤三 # http ...

  6. 在MATPool矩池云完成Pytorch训练MNIST数据集

    本文为矩池云入门手册的补充:Pytorch训练MNIST数据集代码运行过程. 案例代码和对应数据集,以及在矩池云上的详细操作可以在矩池云入门手册中查看,本文基于矩池云入门手册,默认用户已经完成了机器租 ...

  7. 【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误

    问题描述 在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端的文档中操作 "在开发人员门户中启用 OAuth 2.0 用户授权&qu ...

  8. Mac上LLAMA2大语言模型安装到使用

    LLAMA介绍 LLaMA是由Facebook的母公司Meta AI设计的一个新的大型语言模型.LLaMA拥有70亿到650亿个参数的模型集合,是目前最全面的语言模型之一. Llama是目前唯一一个可 ...

  9. CPNtools协议建模安全分析---实例(三)

    对于复杂的系统的建模或者协议的建模,各种颜色集的定义以及变量的声明很重要,要区分明确,对于函数行业进程的定义更加复杂.CPN对协议的描述只适合简单逻辑性的协议分析,如果协议包括复杂的算法,那么CPN就 ...

  10. vim技巧--提取文本与文本替换

    前几天遇到一个使用情景,需要从一个包含各个读取代码文件路径及名字的文件中把文件路径提取出来,做一个filelist,这里用到了文本的提取和替换,这里做个小总结记录一下. 从网上找了一个作者写的代码用来 ...