#PLSQL源码加密
默认情况下,用户创建的各项PL/SQL对象源代码作为文本被存储在数据库表中。某些源代码可能涉及企业核心业务逻辑等隐私信息,对其进行加密存储也是企业信息安全的重要一环。
yaswrap是YashanDB提供的专用于对PL/SQL源代码进行加密包装的一个工具,用户可以使用该工具对指定代码文件进行加密,输出包装后的文件,避免他人通过数据库视图如*_SOURCE查看到PL/SQL源码。
用户可以在数据库中直接执行加密后的内容来创建PL/SQL对象,此时数据库表中存储的也是加密后的源代码。之后该PL/SQL可以正常执行,用户对系统的加密和解密无感知。
yaswrap采用了与Oracle兼容的加密算法,不由用户指定。
需注意的是,对PL/SQL源代码进行包装并不是一个安全的隐藏密码或表名的措施。
用户如需要重建一个加密包装后的PL/SQL对象,不应该直接在数据库中编辑,此种方式将导致过程体无法正常执行,而应该修改源文本文件,再重新使用yaswrap进行加密包装。
以下为对一个PL/SQL源码进行加密包装,和解密使用的操作示例:
1.如下为原始PL/SQL语句,保存在mywrap.sql文件中:
CREATE OR replace FUNCTION myAdd(a INT, b INT) RETURN INT AS
BEGIN
RETURN a + b;
END;
/
2.使用yaswrap工具对mywrap.sql进行包装,生成包装后的mywrap.plb文件:
$ yaswrap iname=mywrap.sql
YashanDB PL/SQL Wrapper: Debug 22.1.0.15 x86_64
Processing mywrap.sql to mywrap.plb
3.生成的mywrap.plb内容:
CREATE OR replace FUNCTION myAdd WRAPPED
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
46 79
VNCA8yPUw4/UNq3WZDDPDrXdbhkwgwzV1wzR+kdyXoU79Vmhs1rDhUfVs8xa4czsnukmbGPp
Qsph5uB/6gknI8lB4R9JwyHMNbqo+uzVKpaV7Pumk7Jvwg==
/
4.通过yasql执行加密后的PL/SQL语句:
-- 执行包装后的PL/SQL语句
CREATE OR replace FUNCTION myAdd WRAPPED
2 a000000
3 354
4 abcd
5 abcd
6 abcd
7 abcd
8 abcd
9 abcd
10 abcd
11 abcd
12 abcd
13 abcd
14 abcd
15 abcd
16 abcd
17 abcd
18 abcd
19 8
20 46 79
21 VNCA8yPUw4/UNq3WZDDPDrXdbhkwgwzV1wzR+kdyXoU79Vmhs1rDhUfVs8xa4czsnukmbGPp
22 Qsph5uB/6gknI8lB4R9JwyHMNbqo+uzVKpaV7Pumk7Jvwg==
23
/
SELECT myAdd(1, 2) FROM dual;
MYADD(1,2)
------------
3
--从USER_SOURCE中查看function的文本
SELECT text FROM USER_SOURCE WHERE name = 'MYADD';
TEXT
----------------------------------------------------------------
CREATE OR replace FUNCTION myAdd WRAPPED
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
46 79
VNCA8yPUw4/UNq3WZDDPDrXdbhkwgwzV1wzR+kdyXoU79Vmhs1rDhUfVs8xa4czsnukmbGPp
Qsph5uB/6gknI8lB4R9JwyHMNbqo+uzVKpaV7Pumk7Jvwg==