OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB
但是,并不是所有业务都接受修改源码,因为复杂系统里,涉及到的修改点可能无法枚举。
这里提供一种临时解决方案:使用 OceanBase PL/SQL 实现一个 dbms_obfuscation_toolkit.md5 系统包,源码如下:
## 创建包 DBMS_OBFUSCATION_TOOLKIT
CREATE OR REPLACE PACKAGE DBMS_OBFUSCATION_TOOLKITISFUNCTION MD5(input_string VARCHAR2)RETURN varchar2;END DBMS_OBFUSCATION_TOOLKIT;
/## 创建包体 DBMS_OBFUSCATION_TOOLKIT
CREATE OR REPLACE PACKAGE BODY DBMS_OBFUSCATION_TOOLKITIS FUNCTION MD5(input_string VARCHAR2)RETURN varchar2IS BEGINRETURN UTL_RAW.CAST_TO_VARCHAR2(dbms_crypto.hash(utl_raw.cast_to_raw(input_string), 2));END MD5;
END DBMS_OBFUSCATION_TOOLKIT;
/
测试效果如下:
OceanBase(TEST@TEST)>SELECT rawtohex(dbms_crypto.hash(utl_raw.cast_to_raw('hello world'),2 /*dbms_crypto.HASH_MD5*/)) md5 FROM dual;
+----------------------------------+
| MD5 |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.000 sec)OceanBase(TEST@TEST)>SELECT utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string => 'hello world')) md5 FROM dual;
+----------------------------------+
| MD5 |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.039 sec)
可见,上述 PL 代码完全实现了相关功能。
这个思路可以延伸到很多缺 PL 包的场景,我们很多时候可以使用自定义的 PL 包来模拟缺失的内容。当然,这个主要集中在计算领域,如果是要做一些网络 IO,就麻烦很多,比如 HTTP 相关的包,就很难模拟。
相关文章:
OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB 但是,并不是所有业务都接受修改源码,因为复杂系统里&…...
Java---类和对象第一节
目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…...
Zeller公式的应用:给定日期,确定周几
开篇 本篇文章依然是对于日期相关函数的实现。 问题概要 给定一个日期,返回为周几 思路分析 这个问题的思路只是对于Zeller公式的直接引用,不存在其他逻辑。公式详情可参考Zeller公式百科 代码实现 #include <stdio.h>// 根据Zeller公式计算 int …...
程序链接和运行 - 笔记
1 linux下程序a连接b.so后,运行时如何找到调用的函数 在Linux下,当程序A连接了动态链接库B(.so文件)后,在运行时,程序A会使用动态链接器(dynamic linker)来解析并加载动态链接库B中的函数。动态链接器会在系统中搜索动态链接库,并将它们加载到程序的地址空间中。 当…...
pyqt 按钮常用格式Qss设置
pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS(Cascading Style Sheets),但专门为 Qt 应用程序设计。使用 QSS&am…...
websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步
文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结(陈硕老师的总结) 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段:数据准备和数据读写。 我们的网络IO…...
【C++】引用传递 常量引用
在C中,引用传递和常量引用是两个常用的概念,主要用于函数参数传递。它们提供了对变量或对象更有效率和更安全的访问方式。 引用传递(Pass by Reference) 引用传递意味着当你将变量作为参数传递给函数时,你实际上是传…...
Docker停止不了
报错信息 意思是,docker.socket可能也会把docker服务启动起来 解决 检查服务状态 systemctl status dockersystemctl is-enabled docker停止docker.socket systemctl stop docker.socket停止docker systemctl stop docker知识扩展 安装了docker后,…...
【网络】为什么TCP需要四次挥手?
在网络通信中,TCP(传输控制协议)是一种可靠的、面向连接的协议,它在数据传输过程中保证了数据的可靠性和顺序性。而TCP的连接建立过程只需要三次握手,但是TCP的挥手过程却需要四次挥手,这是为什么呢&#x…...
2024自动化测试市场分析
大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长: 随着技术的进步和企业对软件质量的要求日益提高,自动化测试在测试行…...
什么是机器视觉应用解决方案?
机器视觉应用解决方案通常指的是利用视觉系统自动检测、处理和分析图像的技术方案,以便执行各种工业或研究任务,如质量控制、自动检测、导航和识别等。在LabVIEW环境中,这些解决方案通常涉及到硬件和软件的紧密集成,以实现高效的数…...
使用 scrapyd 部署 scrapy
1.scrapyd 是什么? Scrapyd 是一个用于部署和运行 Scrapy 爬虫项目的服务器应用程序。它使得你可以通过 HTTP 命令来部署、管理和执行多个 Scrapy 爬虫,非常适合持续集成和生产环境中的爬虫部署。 2.安装scrapyd 并使用 2.1 安装 scrapyd F:\scrapydTes…...
Python计算器程序代码
from tkinter import * import random class App: def __init__(self, master): self.master master self.initwidgets() #表达式的值 self.expr None def initwidgets(self): #定义一个输入组件 self.show Label(relief SUNKEN, font (Courier New, 24), width 25, bg …...
图像分割各种算子算法-可直接使用(Canny、Roberts、Sobel)
Canny算子: import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg cv.imread("../test_1_1.png") edges cv.Canny(img, 100, 200)plt.subplot(121),plt.imshow(img,cmap gray) plt.title(Original Image), plt.xticks([]), …...
Spring Boot进阶 - 实现自动装配原理
Spring Boot的自动装配(Auto-Configuration)是其核心特性之一,它极大地简化了Spring应用的配置过程。自动装配的原理基于Spring框架的Configuration、ConditionalOnClass、ConditionalOnMissingBean等注解,以及Spring Boot提供的s…...
面向电商家居行业3D室内场景合成中的空间感知
本文主要介绍了3D场景合成技术在电商领域,尤其是家居家装行业的应用。它解释了如何使用3D场景合成创建逼真的室内设计,让消费者能够交互式地查看和体验产品,提高购物的趣味性和效率。文章提到了两种主要的3D室内场景生成算法:传统…...
ERROR 1045 (28000) Access denied for user ‘root‘@‘IP‘(using password YES/NO)
查看权限 要查看MySQL用户的权限,您可以使用SHOW GRANTS语句。这将列出用户的权限,包括授予的权限和可以授予其他用户的权限。 以下是查看当前用户权限的SQL命令: SHOW GRANTS; 如果您想查看特定用户的权限,可以使用以下命令&…...
verilog $test$plusargs和$value$plusargs
#学习记录# 目录 Abstract 1 使用宏定义的条件编译 2 $test$plusargs 3 $value$plusargs 参考文献 Abstract 我们在进行verilog仿真时,经常喜欢采用宏定义,来做条件判断,但是通过宏定义做条件判断的这种方法,存在很大的弊端…...
Linux设置open files
临时设置 ulimit -n 1025 查看是否成功 ulimit -n 永久设置,网上很多说添加* soft nofile 65535 * hard nofile 65535但设置后不生效 vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 然后重新…...
Linux下安装JDK并配置环境变量
一、Oracle官网下载jdk 1、官网地址 https://www.oracle.com/java/technologies/downloads/#java17 2、命令下载 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 3、解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz 4、配置环境变量 ec…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
