You can develop secure procedures using SQLScript in SAP HANA by observing the following recommendations.

Using SQLScript, you can read and modify information in the database. In some cases, depending on the commands and parameters you choose, you can create a situation in which data leakage or data tampering can occur. To prevent this, SAP recommends using the following practices in all procedures.

  • Mark each parameter using the keywordsINorOUT. Avoid using theINOUTkeyword.
  • Use theINVOKERkeyword when you want the user to have the assigned privileges to start a procedure. The default keyword,DEFINER, allows only the owner of the procedure to start it.
  • Mark read-only procedures usingREADS SQL DATAwhenever it is possible. This ensures that the data and the structure of the database are not altered.
    Tip Another advantage to usingREADS SQL DATAis that it optimizes performance.
  • Ensure that the types of parameters and variables are as specific as possible. Avoid usingVARCHAR, for example. By reducing the length of variables you can reduce the risk of injection attacks.
  • Perform validation on input parameters within the procedure.

我是说HANA ,为什么每次后面都加那么一大串。  language sqlscript sql security definer reads sql data

这个可以直接创建的SQL窗口里写也行。不用那么麻烦。

我都不知道这下面这个什么意思。奇奇怪怪的没明白LOGIC。 很可能是随便复制的。

),  OUT var_out "_SYS_BIC"."DEMO/DEMO_SQL_CV/proc/tabletype/VAR_OUT" ) language sqlscript sql security definer reads sql data 

 as
 /********* Begin Procedure Script ************/
 BEGIN 

 SELECT CURRENT_DATE,"_BIC_Z0CGDDH" AS DATE_V FROM "_SYS_BIC"."DEMO/DEMO_CV_IP"
  where "_BIC_Z0CGDDH"= 'ZCCG-1403270935500D';

      var_out = 

SELECT
     A."/BIC/Z0CGDDH" AS CGDDH,
     A."/BIC/Z0DDZT" AS DDZT,
     B."/BIC/Z0SL" AS SL,
     B."/BIC/Z0JE" AS JE
FROM "SAPABAP1"."/BIC/AZEZJTO0100" A LEFT JOIN
     "SAPABAP1"."/BIC/AZEZJTO0200" B ON A."/BIC/Z0CGDDH"=B."/BIC/Z0CGDDH"
      WHERE B."/BIC/Z0JE" IS NOT NULL
      AND A."/BIC/Z0CGDDH" IN(:IP_CGDDH)
      ;

END /********* End Procedure Script ************/

权限过滤,有空看看。

) , MD5_CODE ) , OUT AUTH_VALUE ) )
    LANGUAGE SQLSCRIPT
    SQL SECURITY INVOKER
    --DEFAULT SCHEMA <default_schema_name>
    READS SQL DATA AS
BEGIN
/*****************************
    Write your procedure logic
 *****************************/
--根据MD5码 得到值列表。
    ) ;
    --7380563cdbb1061c70bc76c19ef6d9a2
    DECLARE CURSOR c_cursor FOR
    select * from  "SAPABAP1"."/BIC/OHZBWOHD2" where "USERNAME_MD5" = :MD5_CODE  and
    FILTER_COLOMN = :AUTH_IOBJ ORDER BY "VALUE_LOW" asc ;
    val:= '';
    FOR r1 AS c_cursor DO
    --val:= :val || '''' || '''' || r1.VALUE_LOW  || '''' || '''' || ',';
    val:=  :val || '''' ||  r1.VALUE_LOW  || ''''  || ',';
    IF r1.VALUE_LOW = '*' THEN
    val:=  '''' || '*' || '''';
    BREAK ;
    END IF ;
    END FOR;
--    AUTH_VALUE := :val ;
    select RTRIM (:val,',') INTO AUTH_VALUE from dummy;
    --AUTH_VALUE := :val || '''' ;
    CLOSE c_cursor; 

END;

这是一个权限判断的存储过程。想必还是有用,也没看懂。

) , ZIP_MD5 ) ,ZIP_IOBJ ) ,
                                                    OUT VAR_OUT ) , OUT VAR_FLAG ))
    LANGUAGE SQLSCRIPT
    SQL SECURITY INVOKER
    --DEFAULT SCHEMA <default_schema_name>
    READS SQL DATA AS
BEGIN
/*****************************
    Write your procedure logic
 *****************************/
   ;
 ;
  ;
 ) ;
 );
------------------------------------------------------------------------------------
;/* Custom Error Code = 10001*/
 /*User Defined exception handler */
DECLARE EXIT HANDLER FOR CUSTOMCONDITION RESIGNAL;
 --SELECT ::SQL_ERROR_CODE AS "Error Code", ::SQL_ERROR_MESSAGE AS "Error Message" FROM DUMMY;
/*权限检查段,根据输入的MD5获取权限值*/
------------------------------------------------------------------------------------
SCONST := '''' || '*' || '''';
VAR_OUT := '';

call "_SYS_BIC"."Purchase::ZAUTH_DYN_FILTER"(:ZIP_IOBJ,:ZIP_MD5,:SVAR);

 IF :SVAR = '' THEN
 SIGNAL CUSTOMCONDITION SET MESSAGE_TEXT = '^_^权限不足,请联系管理员增加权限!^_^';
 return;
 END IF;

IF :AUTH_IP = '' OR :AUTH_IP = :SCONST  THEN
  VAR_OUT := :SVAR ;
ELSE
/*对比用户输入和存储过程查到的数据*/
IF :SVAR = :SCONST THEN VAR_OUT := :AUTH_IP;
ELSE
 AUTH_IP := :AUTH_IP || ',';
    DO
 ENO := LOCATE(:AUTH_IP , ',',:SNO) ;
 FLAG := LOCATE(:SVAR , SUBSTRING(:AUTH_IP , :SNO , :ENO-:SNO)) ;
  THEN
 SIGNAL CUSTOMCONDITION SET MESSAGE_TEXT = '^_^权限不足,请联系管理员增加权限!^_^';
 return;
 END IF;
 SNO : ;
 END WHILE;

 select RTRIM (:AUTH_IP,',') INTO VAR_OUT from dummy;
 END IF;
 END IF ;

 IF :VAR_OUT = :SCONST THEN
 VAR_FLAG :=  '%'  ;
 END IF ;

END;

HANA 存储过程的更多相关文章

  1. 【HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  2. 【HANA系列】【第六篇】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第六篇]SAP HANA XS ...

  3. HANA SQLScript

    数据类型 日期时间类型 DATE(日期) DATE 数据类型由年.月.日信息组成,表示一个日期值. DATA 类型的默认格式为‘YYYY-MM-DD’. YYYY 表示年, MM 表示月而 DD 表示 ...

  4. HANA SQL

    约束 注释 你可以给你的 SQL 语句添加注释来增加可读性和可维护性. SQL 语句中注释的分隔如下: l  双连字符“--”.所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释. l  ...

  5. SAP HANA 中的决策表(Decision Table)

    http://scn.sap.com/community/developer-center/hana/blog/2013/01/11/what-can-you-do-with-decision-tab ...

  6. SAP HANA procudure 创建用户

    SAP HANA中的用户是没有功能进行直接的拷贝的,但是我们可以通过建立存储过程调用,通过sql语句的方式进行拷贝: 存储过程定义如下,各位可根据自己的需求进行修改: CREATE PROCEDURE ...

  7. 【公众号系列】SAP HANA 平台的优势

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP HANA 平台的优势   ...

  8. 【公众号系列】超详细SAP HANA JOB全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解 ...

  9. 【HANA系列】SAP HANA XS的JavaScript API详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS的Java ...

随机推荐

  1. 《Deep learning》第四章——数值计算

    数值计算 机器学习算法通常需要大量的数值计算.这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,而不是通过解析过程推导出公式来提供正确解的方法.常见的操作包括优化(找到最小化或最大化函数值的参 ...

  2. 高斯过程(GP)

    随机过程基本概念: 随机过程是一个比随机变量更广泛的概念.在概率论中,通常研究一个或多个这样有限个数的随机变量,即使在大数定律和中心极限定理中考虑了无穷多个随机变量,但也要假设随机变量之间互相独立.而 ...

  3. boost之正则表达式

    正则表示主要用于查找一系列符合规则的对象,而我们之前的查找是对某一特定的字符串进行查找. #include <iostream> #include <vector> #incl ...

  4. C#数组实践

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cont ...

  5. JavaScript实现自适应窗口大小的网页

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  6. python3 multiprocessing 模块

    多进程 Multiprocessing 模块 multiprocessing 模块官方说明文档 Process 类 Process 类用来描述一个进程对象.创建子进程的时候,只需要传入一个执行函数和函 ...

  7. 每天一个Linux命令(46)ifconfig命令

    在windows系统中,ipconfig命令行工具被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).     ( ...

  8. 基于 GitHub 搭建/创建自己博客 DIY

    此博客主要实现通过github创建个人定制的博客的功能,主要参考如下两篇文章,再次感谢. 创建GitHub技术博客全攻略 “授人以渔”的教你搭建个人独立博客 [说明]:使用本文的正确方式是参考上述两篇 ...

  9. 【HackerRank】The Love-Letter Mystery

    James找到了他的朋友Harry要给女朋友的情书.James很爱恶作剧,所以他决定要胡搞一下.他把信中的每个单字都变成了回文.对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成' ...

  10. 20145210姚思羽 《网络对抗技术》 Web安全基础实践

    20145210姚思羽 <网络对抗技术> Web安全基础实践 实验后回答问题 1.SQL注入攻击原理,如何防御 ·SQL攻击的原理很简单,就是在用户名输入框里输入SQL语句,来欺骗数据库服 ...