过程和函数定义可能包含细微信息或关键信息,但具有系统特权的用户可以轻松查看公共系统视图 PROCEDURES、FUNCTIONS 或跟踪中的所有定义,即使过程或函数所有者已控制权限权限以保护其对象。如果应用程序开发人员想要保护其知识产权,使其免受任何其他用户(甚至是系统用户)的影响,则他们可以使用 SQLScript 加密。
备注加密过程或函数的解密不受支持,即使 SAP 也无法执行。想要使用加密过程或函数的用户负责保存原始源代码并提供支持能力,因为无法返回,SAP HANA 中没有可用于此目的的支持性工具。
代码语法[CREATE | ALTER] PROCEDURE BEGIN ...END; 代码语法[CREATE | ALTER] FUNCTION BEGIN ...END; 代码语法ALTER PROCEDURE ON;ALTER FUNCTION ON;
如果过程或函数是使用 WITH ENCRYPTION 选项创建的,则其定义将保存为人工无法读取的加密字符串。只有在编译过程或函数时,才会对该定义进行解密。CREATE 语句中的正文将在各种跟踪或监控视图中屏蔽。
使用 ALTER PROCEDURE/FUNCTION 语句对过程或函数进行加密可以通过以下方式实现。与过程主体附带的 ALTER PROCEDURE/FUNCTION 语句可以使用 WITH ENCRYPTION 选项,就像使用 CREATE PROCEDURE/FUNCTION 语句一样。
如果不想在 ALTER PROCEDURE/FUNCTION 语句中重复过程或函数主体并且想要加密现有过程或函数,则可以使用 ALTER PROCEDURE/FUNCTION ON。但是,不保护不含 WITH ENCRYPTION 属性的 CREATE 语句。
备注为每个过程或函数生成新的加密密钥,并在内部进行管理。SQLScript 调试程序、PlanViz、跟踪、监控视图以及其他可显示过程定义的视图不适用于加密过程或函数。
非加密过程或函数可在加密过程或函数内使用。但是,外部调用中的加密并不意味着嵌套调用也受到保护。如果嵌套过程或功能未加密,则其编译和执行详细信息在监控视图或跟踪中可用。
加密过程或函数的对象相关性不受保护。加密的目的是保护过程或函数的逻辑,并且对象相关性不能显示过程或函数的工作方式。
存在大量与程序或功能相关的信息,隐藏所有信息都很难,使问题分析变得困难。因此,用户可以使用无法显示过程或函数逻辑的编译或执行信息。
对于加密过程和函数,某些需要分析过程或函数定义的优化功能处于关闭状态。
加密过程不能用作计算视图的基础。建议改用表用户定义的函数。
附加列 IS_ENCRYPTED 已添加到视图 PROCEDURES 和 FUNCTIONS。
程序SCHEMA_NAMEPROCEDURE_NAME...IS_ENCRYPTED定义系统TEST_PROC...TRUECREATE PROCEDURE TEST_PROC(IN x INT) FUNCTION TEST_FUNC(IN x INT) RETURNS i <加密定义>
对于每个显示过程或函数定义(例如 PROCEDURES 或 FUNCTIONS)的公共接口,定义列仅显示过程的签名(如果已加密)。
示例代码CREATE PROCEDURE TEST_PROC(IN x INT) WITH ENCRYPTION AS BEGIN SELECT 1 AS I FROM DUMMY;END;CREATE FUNCTION TEST_FUNC(IN x INT) RETURNS i INT WITH ENCRYPTION AS BEGIN i = 1;END; 系统视图程序 示例代码SELECT PROCEDURE_NAME, DEFINITION FROM PROCEDURES WHERE PROCEDURE_NAME = 'TEST_PROC'; 结果:PROCEDURE_NAMEDEFINITONTEST_PROCCREATE PROCEDURE TEST_PROC(IN x INT) <加密定义> 系统视图功能 示例代码SELECT FUNCTION_NAME, DEFINITION FROM FUNCTIONS WHERE FUNCTION_NAME = 'TEST_FUNC'; 结果:FUNCTION_NAMEDEFINITONTEST_FUNCCREATE FUNCTION TEST_FUNC(IN x INT) RETURNS i INT <加密定义>
对于显示内部查询的每个监控视图,如果其父项是加密过程调用,则也会隐藏内部语句。调试工具或计划分析工具也会被阻止。
阻止以下支持性工具:
以下视图显示较少的信息:
在这些监控视图中,SQL 语句字符串替换为字符串 procedure