WRAP 函数 - 模糊化 DDL 语句

WRAP 函数将可读的 DDL 语句变换为模糊化 DDL 语句。

语法

在模糊化 DDL 语句中,过程逻辑和嵌入式 SQL 语句按如下方式进行加密:无法轻松抽取逻辑中的知识产权。如果 DDL 语句对应于外部例程定义,那么将对参数列表后面的部分进行编码。

阅读语法图跳过直观语法图DBMS_DDL.WRAP(object-definition-string )

参数

object-definition-string
包含 DDL 语句文本的 CLOB(2M) 类型的字符串,可以为下列一项内容 (SQLSTATE 5UA0O):
  • create procedure
  • create function
  • create package (PL/SQL)
  • create package body (PL/SQL)
  • create trigger
  • create view
  • alter module add function
  • alter module publish function
  • alter module add procedure
  • alter module publish procedure
结果是 CLOB(2M) 类型的字符串,其中包含输入语句的已编码版本。编码由原始语句的前缀组成,并且包括例程签名或触发器、视图或包名称(后跟关键字 WRAPPED)。此关键字后跟有关执行函数的应用程序服务器的信息。信息的格式为 pppvvrrm,其中:
  • ppp 使用字母 SQL 将产品识别为 Db2®
  • vv 是一个两位数版本标识,如“09”
  • rr 是一个两位数发行版标识,如“07”。
  • m 是一个一位字符修改级别标识,如“0”。
例如,V9.7 的修订包 2 将标识为“SQL09072”。此应用程序服务器信息后跟一个字母字符串(a-z 和 A-Z)、数字 (0-9)、下划线和冒号。除了在模糊化后仍可保持可读的前缀之外,不会对输入语句进行任何语法检查。
已编码的 DDL 语句长度通常超过该语句的纯文本格式。如果结果超过 SQL 语句的最大长度,那么将出现错误 (SQLSTATE 54001)。
注: 语句的编码意味着模糊化内容,并且不应被视为强加密形式。

权限

对 DBMS_DDL 模块的 EXECUTE 特权

示例

  • 生成根据每小时工资来计算年薪(规定每周 40 小时)的函数的模糊化版本
    
    VALUES(DBMS_DDL.WRAP('CREATE FUNCTION ' ||
                        'salary(wage DECFLOAT) ' ||
                        'RETURNS DECFLOAT ' ||
                        'RETURN wage * 40 * 52'))
    The result of the previous statement would be something of the form:
    
    CREATE FUNCTION salary(wage DECFLOAT) WRAPPED SQL09072 obfuscated-text
  • 生成一个用于设置复杂缺省值的触发器的模糊化格式
    VALUES(DBMS_DDL.WRAP('CREATE OR REPLACE TRIGGER ' ||
                          'trg1 BEFORE INSERT ON emp ' ||
                          'REFERENCING NEW AS n ' ||
                          'FOR EACH ROW ' ||
                          'WHEN (n.bonus IS NULL) ' ||
                          'SET n.bonus = n.salary * .04'))
    
    The result of the previous statement would be something of the form:
    
    CREATE OR REPLACE TRIGGER trg1 WRAPPED SQL09072 obfuscated-text