SQLã€ã³ãžã§ã¯ã·ã§ã³ã¯æãæ°žç¶çã§ æå®³ãªèåŒ±æ§ ãšã³ã¿ãŒãã©ã€ãºãœãããŠã§ã¢ã§ã¯ãCOBOL-DB2ç°å¢ãäŸå€ã§ã¯ãããŸãããä¿¡é Œæ§ã®é«ãã§å®è©ãããã«ãããããããå€ãã®COBOL-DB2ã·ã¹ãã ã¯æ°å幎åã«éçºãããçŸä»£ã®ã»ãã¥ãªãã£å¯Ÿçãžã®é æ ®ãäžååã§ããããã®çµæãåçãªSQLæ§ç¯ãæåã«ããæååé£çµãæä»£é ãã®å ¥ååŠçææ³ãäŸç¶ãšããŠåºãå©çšãããŠãããæ»æè ããããã®ã·ã¹ãã ãæªçšããæ©äŒãçã¿åºããŠããŸãã
COBOL-DB2ãæèŒããã¡ã€ã³ãã¬ãŒã ã¯ãéè¡ãä¿éºãæ¿åºãµãŒãã¹ãšãã£ãéèŠãªç£æ¥ãæ¯ããããšãå€ããé¡§å®¢ã®æ©å¯ããŒã¿ãéèååŒãæ©å¯èšé²ãä¿åã»åŠçããŸããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æãæåãããšãå人æ å ±ã®æŒæŽ©ãäžæ£ã¢ã¯ã»ã¹ããããã¯éèŠãªæ¥åã®äžæãšãã£ãåé¡ãçºçããå¯èœæ§ããããŸãããããã®ãªã¹ã¯ã¯ãã·ã¹ãã ã®å€ããšè€éãã«ãã£ãŠããã«æ·±å»åããŸããå€ãã®ã³ãŒãããŒã¹ã®è€éãææžåãããŠããªãã¬ã¬ã·ãŒ ããžãã¯ãšããŒãã³ãŒããããã·ã§ãŒãã«ããã«ãã£ãŠã远å ã®è匱æ§ãçããŸãã
COBOL-DB2ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã«å¯ŸåŠããã«ã¯ãèšèªã®æ§æãDB2ã®çµã¿èŸŒã¿SQLæ©èœããããŠå®å šã§ãªãã³ãŒãã«ã€ãªããå¯èœæ§ã®ããå žåçãªãã¿ãŒã³ãæ·±ãçè§£ããå¿ èŠããããŸãããã©ã¡ãŒã¿åãããã¯ãšãªã®äœ¿çšãå ¥åã®æ€èšŒãšãµãã¿ã€ãºãæå°æš©éã®ããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®é©çšãšãã£ãã»ãã¥ã¢ãªéçºãã©ã¯ãã£ã¹ã¯ããããã®ãªã¹ã¯ã軜æžããã®ã«åœ¹ç«ã¡ãŸãã广çãªæ€åºã«ã¯ã培åºããã³ãŒãã¬ãã¥ãŒãäžå¯æ¬ ã§ãã ç¹æ®ãªéçè§£æç¶ç¶çãªç£èŠã«ãããæœåšçãªè匱æ§ãæªçšãããåã«ç¹å®ããä¿®æ£ããããšãã§ããŸãããããã®ãã©ã¯ãã£ã¹ãæ¡çšããããšã§ãéçºããŒã ã¯ãæãå€ããæãããã·ã§ã³ã¯ãªãã£ã«ã«ãªCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŠããã»ãã¥ãªãã£äœå¶ã匷åã§ããŸãã
COBOL-DB2ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³å ¥é
ã¡ã€ã³ãã¬ãŒã ã¢ããªã±ãŒã·ã§ã³ã¯ãå ç¢ã§æçããã·ã¹ãã ãšããèŠãªãããŸãããããããããã®éèŠãªãã©ãããã©ãŒã ã§ãããç¹ã«SQLã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ã«é¢ããŠã¯ãé倧ãªã»ãã¥ãªãã£äžã®æ¬ é¥ãæ±ããŠããå¯èœæ§ããããŸããéèŠãªããžãã¹æ©èœãæ¯ããCOBOL-DB2ããã°ã©ã ã¯ãåçSQLãæåå ¥ååŠçæè¡ã«é »ç¹ã«äŸåããŠãããã€ã³ãžã§ã¯ã·ã§ã³æ»æã«å¯ŸããŠé©ãã»ã©è匱ã§ãããããã®ããã°ã©ã ããªãå±éºã«ãããããŠããã®ããçè§£ããããšãã广çãªä¿è·ã®ç¬¬äžæ©ãšãªããŸãã
COBOL-DB2 ããã°ã©ã ã®è匱æ§ã®åå ã¯äœã§ãã?
COBOL-DB2ããã°ã©ã ã¯ãæ°å幎åã«æžãããã³ãŒãã䜿ããªãããèšå€§ãªéã®ããžãã¹ã¯ãªãã£ã«ã«ãªããŒã¿ãåŠçããããšããããããŸããé·å¹Žã«ãããã¡ã³ããã³ã¹äœæ¥ã®äžã§ãææ°ã®ã»ãã¥ãªãã£åºæºãç¡èŠããè¿éãåé¿çãå°å ¥ãããŠããŸãããè匱æ§ã®äžè¬çãªåå ã®äžã€ã¯ãåçãªSQLçæã§ããããã¯ããŠãŒã¶ãŒå ¥åãé©åãªãµãã¿ã€ãºåŠçãªãã«SQLæååã«çŽæ¥é£çµããããã®ã§ãããã®ã¢ãããŒãã¯æè»æ§ãé«ããŸãããã€ã³ãžã§ã¯ã·ã§ã³æ»æã®è åšãšãªããŸãã
å ·äœçãªäŸãæããŸããšã以äžã®éãã§ãã
MOVE 'SELECT * FROM CUSTOMERS WHERE NAME = ''' TO SQL-STRING.
STRING USER-NAME DELIMITED BY SIZE INTO SQL-STRING.
ãã®ã³ãŒãã§ã¯ããŠãŒã¶ãŒå
¥åãSQLã³ãã³ãã«ç²ç®çã«è¿œå ãããŸããæ»æè
ã ' OR '1'='1çµæã®ã¯ãšãªã¯ãã¹ãŠã®ã¬ã³ãŒããè¿ããŸããå
¥åæ€èšŒãäžååã§ããã¹ã倿°ã®äœ¿çšã«äžè²«æ§ããªããšãã£ãç¶æ³ãšçžãŸã£ãŠããã®ãããªãã¿ãŒã³ã¯ã·ã¹ãã ã容æãªæšçã«ããŠããŸãå¯èœæ§ããããŸããCOBOL-DB2ããã°ã©ã ã¯ä¿¡é Œã§ããç°å¢ã§å®è¡ãããããšãå€ããããéçºè
ã¯æªæã®ããå
¥åãäºæããŠããªãå¯èœæ§ãããããªã¹ã¯ãããã«é«ãŸããŸãã
ã¡ã€ã³ãã¬ãŒã ç°å¢ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯
ã¡ã€ã³ãã¬ãŒã ã¯æ©å¯ããŒã¿ã®ä¿åãšåŠçãšãã圹å²ãæ ã£ãŠãããããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®æœåšçãªåœ±é¿ã¯ç¹ã«æ·±å»ã§ããã¡ã€ã³ãã¬ãŒã ã¯éèãå»çãæ¿åºãšãã£ãéèŠãªåéãæ¯ããŠããã䟵害ãçºçãããšæ°çŸäžä»¶ãã®èšé²ãæŒæŽ©ããããéèŠãªãµãŒãã¹ãäžæããããèŠå¶éµå®ãè ãããããããå¯èœæ§ããããŸããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ãæªçšããæ»æè ã¯ãäžæ£ãªã¯ãšãªãå®è¡ããããæ©å¯æ å ±ãååŸããããããã«ã¯éèŠãªããŒã¿ãæ¹ããã»åé€ãããããå¯èœæ§ããããŸãã
ããã«ãCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãæ°ããã·ã¹ãã ã«èŠããããããªææ°ã®ã»ãã¥ãªãã£å±€ãæ¬ ããŠããããšããããããŸããã»ãã¥ãªãã£ãããã®é©çšã¯ãŸãã§ãã£ãããé©çšãå°é£ã§ãã£ãããä»ã®ã·ã¹ãã ãšã®ç·å¯ãªé£æºãäžååã§ãã£ããããå ŽåããããŸãã ã¬ã¬ã·ãŒã·ã¹ãã ãªã¹ã¯ãæ¡å€§ããå¯èœæ§ããããŸããåäžã®è匱æ§ãæªçšããããšãçµç¹ã®ãããã¯ãŒã¯å ã§ã©ãã©ã«ã ãŒãã¡ã³ãïŒæšªæ¹åã®ç§»åïŒã®æ©äŒãçãŸããŸãããã®ãããã¡ã€ã³ãã¬ãŒã ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã¯ããããã®ã·ã¹ãã ã®èæœåãšè€éãããããŠäºæ¥ç¶ç¶æ§ã«ãããéèŠæ§ãçè§£ããŠããæ»æè ã«ãšã£ãŠãéåžžã«äŸ¡å€ã®é«ãæšçãšãªããŸãã
COBOL-DB2 ã«ãããå žåçãªæ»æãã¯ãã« (åç SQLããŠãŒã¶ãŒå ¥åãã¬ã¬ã·ãŒ ã€ã³ã¿ãŒãã§ãŒã¹)
COBOL-DB2ç°å¢ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã¯ãäºæž¬å¯èœãªåçSQLçæãã¿ãŒã³ãæªçšããããšãå€ãã EXEC SQL ãŠãŒã¶ãŒå
¥åããŒã¿ãæ±ãæã¯ãå³å¯ãªå
¥åæ€èšŒãè¡ãããŠããªãå Žåãç¹ã«è匱ã§ããäŸãã°ãCOBOLã®åçSQLã§ã¯ããŠãŒã¶ãŒå
¥åããçæããã倿°ãçšããŠå®è¡æã«ã¯ãšãªãæ§ç¯ããå ŽåããããŸãã
EXEC SQL
PREPARE DYNAMIC-STMT FROM :SQL-STRING
END-EXEC.
EXEC SQL
EXECUTE DYNAMIC-STMT
END-EXEC.
é©åãªãµãã¿ã€ãºããªããã°ãæ»æè
㯠SQL-STRING æªæã®ããã³ãã³ããæ¿å
¥ããå¯èœæ§ããããã¬ã¬ã·ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯åé¡ãæªåãããŸããå€ãããããžã§ãã端æ«ã¢ããªã±ãŒã·ã§ã³ã«ã¯ææ°ã®å
¥åæ€èšŒæ©èœãåãã£ãŠããªãå Žåããããèªç±åœ¢åŒã®ããã¹ããéèŠãªSQLæã«ãã§ãã¯ãããã«ãã®ãŸãŸå
¥åãããŠããŸãå¯èœæ§ããããŸããæ°ããããã³ããšã³ããšCOBOL-DB2ããã¯ãšã³ããã€ãªãWebãµãŒãã¹ãããã«ãŠã§ã¢ã¯ãããŒã¿ãã¬ã¬ã·ãŒã³ãŒãã«æž¡ãåã«ãµãã¿ã€ãºåŠçãè¡ããªããšããããªããªã¹ã¯ãããããå¯èœæ§ããããŸãã
ãã®ãããªæ»æãã¯ãã«ã¯ãã·ã¹ãã ãå ¥åããŒã¿ã«ãã°ãã°ä¿¡é Œã眮ããŠããããšãã€ãŸãå éšãŠãŒã¶ãŒãèªååãããããã»ã¹ãæ£ããåäœãããšæ³å®ããŠããããšãæªçšããŸããæ»æè ã¯ãã®æ³å®ãå©çšããå©çšå¯èœãªãããããã£ãã«ãéããŠæªæã®ããæååãéä¿¡ããããšã§ãäžæ£ãªã¯ãšãªãå®è¡ããããããŒã¿ãæ¹ãããããããŸãããã®ãããå æ¬çãªå ¥åæ€èšŒãšå®å šãªã³ãŒãã£ã³ã°ææ³ãé²åŸ¡ã«äžå¯æ¬ ã§ãã
SQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã®æåã«ããããžãã¹ãžã®åœ±é¿
COBOL-DB2ã·ã¹ãã ãžã®SQLã€ã³ãžã§ã¯ã·ã§ã³æ»æãæåããå Žåãç倧ãªè¢«å®³ãããããå¯èœæ§ããããŸãã峿ã®ããŒã¿äŸµå®³ã«ãšã©ãŸãããæ»æè ã¯é¡§å®¢ã®æ©å¯æ å ±ã財åèšé²ãå人è奿 å ±ãžã®äžæ£ã¢ã¯ã»ã¹ãååŸããå¯èœæ§ããããŸããããã¯ãèŠå¶éåãé«é¡ãªçœ°éããããŠé¡§å®¢ããã®ä¿¡é Œãæãªãè©å€ã®å€±å¢ã«ã€ãªããå¯èœæ§ããããŸãã
ããã·ã§ã³ã¯ãªãã£ã«ã«ãªç°å¢ã§ã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã¯æ¥åãæ··ä¹±ãããå¯èœæ§ããããŸããæ¿å ¥ãããã³ãã³ãã«ãã£ãŠãéçšããŒã¿ãæ¹ãããããããéèŠãªããã»ã¹ã忢ãããã課éã·ã¹ãã ãååŒã·ã¹ãã ã«æ¯éããããããããå¯èœæ§ããããŸããç¹ã«ããã¯ã¢ããã䟵害ãããå Žåããæ»æã鷿鿀ç¥ãããªãå Žåã埩æ§ã«ã¯æéãšè²»çšãããããŸããèŠå¶ã®å³ããæ¥çã§ã¯ã䟵害ãçºçãããšå€ãã®å Žåãæ å ±é瀺矩åã課ããããçµç¹ã¯äžéã®å³ããç£èŠã«ãããããããšã«ãªããŸãã
ãããã®ãªã¹ã¯ã軜æžããã«ã¯ãå€å±€çãªã¢ãããŒããå¿ èŠã§ããå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãåçSQLã®äœ¿çšã«é¢ãã培åºçãªã¬ãã¥ãŒãå ç¢ãªå ¥åæ€èšŒããããŠç¶ç¶çãªç£èŠã¯ãããããéèŠãªåœ¹å²ãæãããŸããç¹ã«ã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ãæ¥åžžæ¥åã«äžå¯æ¬ ãªå Žåãçµç¹ã¯ãããã®è åšãç¡èŠããããšã¯ã§ããŸãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®çã®åœ±é¿ãèªèããããšã¯ãCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãæåªå ã«èããäžã§äžå¯æ¬ ã§ãã
COBOL-DB2ã³ãŒãã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®çºçŸ
COBOL-DB2ã·ã¹ãã ã¯ãéèŠãªããžãã¹ããã»ã¹ã®äžæ žã§çšŒåããããšããããããŸãããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã«å¯ŸããŠè匱ãªèšèšãã¿ãŒã³ãå«ãŸããŠããå ŽåããããŸãããã©ã¡ãŒã¿åãããã¯ãšãªçšã®ã©ã€ãã©ãªãçµã¿èŸŒãŸããææ°èšèªãšã¯ç°ãªããCOBOL-DB2éçºã¯åçSQLãšæåã®æååæäœã«å€§ããäŸåããŠããŸãããã®äŸåã«ãããæ»æè ãæªæã®ããå ¥åãæ¿å ¥ããããŒã¿ããŒã¹ã¯ãšãªãæäœããããã®è€æ°ã®çµè·¯ãçãŸããŸãããããã®è匱æ§ãã©ã®ããã«çºçããããçè§£ããããšã¯ãã¬ã¬ã·ãŒã³ãŒãããŒã¹ã广çã«ä¿è·ããããã«äžå¯æ¬ ã§ãã
SQLæã®å®å šã§ãªãé£çµ
COBOL-DB2ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®æãäžè¬çãªåå ã®äžã€ã¯ããŠãŒã¶ãŒå ¥åãSQLæã«å®å šã§ãªãæ¹æ³ã§é£çµããããšã§ããéçºè ã¯ãç¹ã«æè»ãªæ€çŽ¢æ¡ä»¶ãã¬ããŒãçæãæ±ãéã«ãæååæäœãçšããŠã¯ãšãªãåçã«æ§ç¯ããããšããããããŸãããããããŠãŒã¶ãŒå ¥åãååã«ãµãã¿ã€ãºãããŠããªãå Žåããã®ææ³ã¯æ¬è³ªçã«ãªã¹ã¯ã䌎ããŸãã
æ»æè ã¯æªæã®ããSQLã³ãŒããæ¿å ¥ããããšã§ãããæªçšããã¯ãšãªã®ããžãã¯ãæ¹å€ããå¯èœæ§ããããŸããCOBOLã®åçSQLã«ã¯ãææ°ã®ãã¬ãŒã ã¯ãŒã¯ã«èŠããããããªèªåçãªä¿è·æ©èœããªãããããã®ãã¿ãŒã³ã¯ç¹ã«å±éºã§ããããšã瀟å ã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŠãããã¹ãŠã®ãŠãŒã¶ãŒãä¿¡é Œã§ãããšæ³å®ããã®ã¯èª€ãã§ãããæ·±å»ãªã»ãã¥ãªãã£äžã®åœ±é¿ãåãŒãå¯èœæ§ããããŸãã
å®å šãªã³ãŒãã£ã³ã°ææ³ã§ã¯ããã®ãããªãã¿ãŒã³ããã¹ã倿°ãçšãããã©ã¡ãŒã¿åãããã¯ãšãªã«çœ®ãæããå ¥åãçŽæ¥é£çµããå¿ èŠæ§ããªãããŸããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã®ãªã¹ã¯ã軜æžããã«ã¯ããã®ãããªã³ãŒããã¬ãã¥ãŒãããªãã¡ã¯ã¿ãªã³ã°ããããšãäžå¯æ¬ ã§ãã
EXEC SQLãšCURSORã®äœ¿çšã«ãããå ¥åæ€èšŒã®æ¬ åŠ
ããäžã€ã®è匱æ§ã¯ããŠãŒã¶ãŒå ¥åãEXEC SQLæãCURSORæã«åã蟌ãåã«æ€èšŒããµãã¿ã€ãºãè¡ãããŠããªãããšã«èµ·å ããŸããCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã¯ã端æ«ã»ãã·ã§ã³ãããããã¡ã€ã«ãWebããã³ããšã³ããªã©ãæ§ã ãªãã£ãã«ããã®å ¥åã«äŸåããããšããããããŸãããããã®å ¥åãé©åãªãã§ãã¯ãªãã«åãå ¥ãããããšãSQLã€ã³ãžã§ã¯ã·ã§ã³ã®æ»æçµè·¯ãšãªããŸãã
æ€èšããŠãã ããïŒ
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT * FROM CUSTOMERS WHERE NAME = :USER-NAME
END-EXEC.
ãã¹ã倿°ã¯æååã®é£çµãããå®å šã§ããããŠãŒã¶ãŒå ¥åãæ€èšŒãããŠããªãå Žåãæªçšãããå¯èœæ§ããããŸããæ»æè ã¯ãè§£æãããã¯ãšã³ãããžãã¯ã®è匱æ§ãæªçšããããã«ãäºæããªãæåãå ¥åããå¯èœæ§ããããŸããããã«ãå€ãCOBOLããã°ã©ã ã§ã¯ããã©ã¡ãŒã¿ãã€ã³ãã£ã³ã°ãªãã§ãŠãŒã¶ãŒå ¥åãåçŽã«é£çµããæºåæžã¿ã¹ããŒãã¡ã³ããå«ãåçSQLã䜿çšãããŠããå ŽåããããŸãã
ããŒã¿åå¶çŽã®é©çšã蚱容å€ã®ãã¯ã€ããªã¹ãåãç¹æ®æåã®ãµãã¿ã€ãºãªã©ãå æ¬çãªå ¥åæ€èšŒãäžå¯æ¬ ã§ãããã¹ã倿°ã䜿çšããå Žåã§ããéçºè ã¯ãã¹ãŠã®ãŠãŒã¶ãŒå ¥åãä¿¡é Œã§ããªããã®ãšããŠæ±ããã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ãããã«å³å¯ãªæ€èšŒãé©çšããå¿ èŠããããŸãã
è匱㪠COBOL-DB2 ã³ãŒãã£ã³ã°ãã¿ãŒã³ã®äŸ
ãªã¹ã¯ã®é«ãã³ãŒãã£ã³ã°ãã¿ãŒã³ãèªèããããšã¯ãããããæ€åºãä¿®åŸ©äœæ¥ã«ãããŠäžå¯æ¬ ã§ããã¬ã¬ã·ãŒCOBOL-DB2ããã°ã©ã ã«ã¯ãæ»æè ã«æªçšãããå¯èœæ§ã®ããäžé©åãªã³ãŒãã£ã³ã°ãã¿ãŒã³ãæ°å€ãå«ãŸããŠããŸãããããããã¿ãŒã³ãšããŠã¯ãWHEREå¥ãžã®ãŠãŒã¶ãŒçŽæ¥å ¥åããšã¹ã±ãŒããããŠããªãåçSQLæååãé£çµã³ãã³ãã®äžååãªãã§ãã¯ãªã©ãæããããŸãã
å®å šã§ãªãåç SQL ã®äŸ:
STRING 'DELETE FROM ORDERS WHERE ID = ' DELIMITED BY SIZE
USER-INPUT-ID DELIMITED BY SIZE
INTO SQL-STRING
ãã®ãããªãã¿ãŒã³ã¯ããŠãŒã¶ãŒãå ¥åããå€ãé©åã«æ€èšŒãŸãã¯ãµãã¿ã€ãºãããŠããªãå ŽåãçŽæ¥çãªã€ã³ãžã§ã¯ã·ã§ã³ãã€ã³ããäœæããŸããæ»æè ã¯SQLã³ãã³ãã倿ŽãŸãã¯æ¡åŒµããå ¥åãäœæããä»»æã®ã¯ãšãªãå®è¡ããããããŒã¿ãåé€ããããæ©å¯æ å ±ãæŒæŽ©ããããããå¯èœæ§ããããŸãã
ã³ãŒãã¬ãã¥ãŒãšéçè§£æã«ãããŠããããã®ãã¿ãŒã³ãç¹å®ããããšã¯éåžžã«éèŠã§ããããŒã ã¯ããã©ã¡ãŒã¿åãããã¯ãšãªãšãã¹ã倿°ãæ£ãã䜿çšããããã®ãªãã¡ã¯ã¿ãªã³ã°ãåªå ããå¿ èŠããããŸããå Žåã«ãã£ãŠã¯ãè€éãªæé ãããå°ãããããçŠç¹ãçµã£ãã«ãŒãã³ã«åå²ããããšã§ãæ€èšŒãç°¡çŽ åããå šäœçãªãªã¹ã¯ç¯å²ãåæžã§ããå¯èœæ§ããããŸãã
ã¬ã¬ã·ãŒã³ãŒããšã¡ã³ããã³ã¹ã®èª²é¡
COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ç¢ºä¿ã¯ããã®å€ããšè€éãããã«ç¹ã«å°é£ã§ããå€ãã®ã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ã¯æ°å幎ã«ããã£ãŠé²åãç¶ããããžãã¹ããžãã¯ã®éå±€ãææžåãããŠããªãæ©èœããããŠæè¡çè² åµãèç©ãããŠããŸãããããã®ã·ã¹ãã ãä¿å®ããããŒã ã«ã¯ãç¹å®ã®èšèšäžã®éžæãè¡ãããçç±ããç°ãªãã¢ãžã¥ãŒã«ãã©ã®ããã«çžäºäœçšããããçè§£ããããã«å¿ èŠãªçµç¹çãªç¥èãäžè¶³ããŠããå¯èœæ§ããããŸãã
ã¬ã¬ã·ãŒã³ãŒãã¯å€æŽãæãããšããããããŸããå€§èŠæš¡ã§è€éã«çµ¡ã¿åã£ãã«ãŒãã³ã®ãªãã¡ã¯ã¿ãªã³ã°ã¯ãªã¹ã¯ã䌎ããæ°ããªãã°ãçºçããããããžãã¹ã¯ãªãã£ã«ã«ãªæ©èœãæãªããããããå¯èœæ§ããããŸããããã«ãå€ãã·ã¹ãã ã§ã¯æä»£é ãã®éçºããŒã«ã䜿çšãããŠããããææ°ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãæ¬ åŠããŠããããããããå æ¬çãªæ€èšŒã®å®çŸãå°é£ã«ãªãå ŽåããããŸãã
ãããã®èª²é¡ã«å¯ŸåŠããã«ã¯ãããã¢ã¯ãã£ããªã»ãã¥ãªãã£ã¬ãã¥ãŒãšç¶ç¶çãªç£èŠãäžå¯æ¬ ã§ããçµç¹ã¯ãæããªã¹ã¯ãé«ããé »ç¹ã«å€æŽãããã³ã³ããŒãã³ããåªå çã«åæä¿®æ£ããå¿ èŠããããŸããæ®µéçãªæ¹åãšåŒ·åãªãã¹ããã©ã¯ãã£ã¹ãçµã¿åãããããšã§ãè€éãã軜æžããã»ãã¥ãªãã£ãé·æçã«åäžãããããšãã§ããŸãããããã®éçãèªèããããšã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ãªã©ã®è åšããCOBOL-DB2ã·ã¹ãã ãä¿è·ããããã®çŸå®çã§æç¶å¯èœãªæŠç¥ãçå®ããéµãšãªããŸãã
SQLã€ã³ãžã§ã¯ã·ã§ã³ãæåã§æ€åºãããã¯ããã¯
COBOL-DB2ã·ã¹ãã ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã®çºèŠã¯ãå€ãã®å Žåãæäœæ¥ã«ããåæããå§ãŸããŸããèªååããŒã«ã¯æ€åºãå¹çåããŸãããé«ãªã¹ã¯ãªã³ãŒããã¿ãŒã³ãç¹å®ããæ¹æ³ã®åºç€ãçè§£ããããšã¯äŸç¶ãšããŠäžå¯æ¬ ã§ããæäœæ¥ã«ããææ³ãçšããããšã§ãéçºè ãã»ãã¥ãªãã£ã¢ããªã¹ãã¯ãããã¥ã¡ã³ããä¹ããèšèšäžã®æ±ºå®ãäžéæãªã¬ã¬ã·ãŒã·ã¹ãã ã«ãããŠããæèã«åºã¥ããçè§£ãé©çšããããšãã§ããŸãããããã®ææ³ã¯é²åŸ¡ã®æåç·ãšãªããæ»æè ãæªçšããåã«è匱ãªé åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
æåã³ãŒãã¬ãã¥ãŒïŒãªã¹ã¯ã®é«ãSQLæã®ç¹å®
æåã«ããã³ãŒãã¬ãã¥ãŒã¯ãCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãç¹å®ããæã广çãªæ¹æ³ã®äžã€ã§ããã¬ãã¥ãŒæ åœè ã¯ãSQLæã®æ§ææ¹æ³ãšãŠãŒã¶ãŒå ¥åã®æ¿å ¥ç®æã«çŠç¹ãåœãŠãããã°ã©ã ããžãã¯ã粟æ»ããŸããç¹ã«ãå ¥åãã³ãã³ãã«é£çµãããå¯èœæ§ã®ããåçSQLã«ã¯æ³šæãæããŸãã
ãã¹ã倿°ã¯ããçšåºŠã®ä¿è·ãæäŸããŸãããå ¥åæ€èšŒã¯å¿ ã確èªããå¿ èŠããããŸãã广çãªã³ãŒãã¬ãã¥ãŒã§ã¯ãäžè²«ãããµãã¿ã€ãºãã¿ãŒã³ããã©ã¡ãŒã¿åãããã¯ãšãªã®é©åãªäœ¿çšããããŠå®å šã§ãªãé£çµã®åé¿ãæ±ããããŸãããŸãããªãã¡ã¯ã¿ãªã³ã°å¯èœãªç¹°ãè¿ãããžãã¯ããã§ãã¯ããå ¥ååŠçãããå®å šãã€å®¹æã«ä¿å®ã§ããããã«ããŸãããããã®é åãäœç³»çã«ã¬ãã¥ãŒããããšã§ãããŒã ã¯ä¿®æ£ãå¿ èŠãªé«ãªã¹ã¯ã®ã¹ããŒãã¡ã³ããç¹å®ã§ããŸãã
COBOL ã³ãŒãã«ãããåç SQL çæã®ãã¬ãŒã¹
åçSQLã¯ãå®è¡æã«ã¯ãšãªãæè»ã«æ§ç¯ã§ãããããCOBOL-DB2ã·ã¹ãã ã§ãã䜿çšãããŸãããããããã®æè»æ§ããã«ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ã®ãã¬ãŒã¹ã¯ããè€éã«ãªããŸããæåã§åæãè¡ãã«ã¯ã倿°ãã³ãŒãå ãã©ã®ããã«æµãããããããŠãŠãŒã¶ãŒå ¥åãSQLã³ãã³ãã«ã©ã®ãããªåœ±é¿ãäžããããçè§£ããå¿ èŠããããŸãã
æåãã¬ãŒã¹ã§ã¯ã倿°ãå ¥åããå®è¡ãŸã§è¿œè·¡ããæ€èšŒããµãã¿ã€ãºã«ãããã®ã£ãããæ¢ããŸãããã®ããã»ã¹ã§ã¯ãããããã¡ã€ã«ããã®å ¥åããå®å šã ãšæ³å®ãããŠããå€ãã€ã³ã¿ãŒãã§ãŒã¹ãªã©ã埮åŠãªåé¡ãèŠã€ããããšããããããŸãããããã®ãã¹ãæ³šææ·±ã远跡ããããšã§ãã»ãã¥ãªãã£ããŒã ã¯ãèªååããŒã«ã§ã¯èŠéããŠããŸãããããã¯é«åºŠã«ã«ã¹ã¿ãã€ãºãããã¬ã¬ã·ãŒã·ã¹ãã ã§ã¯è§£éãå°é£ãªã€ã³ãžã§ã¯ã·ã§ã³ã®æ©äŒãæ€åºã§ããŸãã
现工ãããå ¥åã«ãããã¹ãïŒãšã©ãŒããŒã¹ããã³åäœæ€åºïŒ
ã³ãŒããèªãã ãã§ãªãã现工ããå ¥åãçšããæåãã¹ãã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ã®ååšã確èªããããã®å®çšçãªæ¹æ³ã§ããã»ãã¥ãªãã£ãã¹ã¿ãŒã¯ãå©çšå¯èœãªãããããã£ãã«ãéããŠæªæã®ããå ¥åãäºæããªãå ¥åãäŸçµŠããã·ã¹ãã ã®å¿çã芳å¯ããŸãããã®ã¢ãããŒãã¯ãå ¥åãé©åã«åŠçãããªãããšã§ããŒã¿ããŒã¹ããšã©ãŒã¡ãã»ãŒãžãè¿ããšã©ãŒããŒã¹ã»ã€ã³ãžã§ã¯ã·ã§ã³ãçºèŠããã®ã«ç¹ã«å¹æçã§ãããšã©ãŒããŒã¹ã»ã€ã³ãžã§ã¯ã·ã§ã³ãšã¯ãå ¥åãé©åã«åŠçãããªãããšã§ããŒã¿ããŒã¹ããšã©ãŒã¡ãã»ãŒãžãè¿ãããšã§ããã®èåŸã«ããSQLãæããã«ãªãçŸè±¡ã§ãã
ããšãã°ã次ã®ãããªå ¥åãæäŸããŸãã
' OR '1'='1
ã·ã¹ãã ããã¹ãŠã®ã¬ã³ãŒããè¿ããããã¯ãšãªæ§é ãæããã«ãããšã©ãŒãã¹ããŒãããããå Žåãæ¬ é¥ãæããã«ãªãå¯èœæ§ããããŸããåäœæ€åºã§ã¯ãæªæã®ããå ¥åã䜿çšãããéã«ãçµæã»ããã®å€æŽãäžæ£ã¢ã¯ã»ã¹ãªã©ãã¢ããªã±ãŒã·ã§ã³ã®åäœã®å€åãç£èŠããŸãã
è€æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæã€COBOL-DB2ã·ã¹ãã ã§ã¯ãæåãã¹ããç¹ã«éèŠã§ããããããžã§ããã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ãAPIãšã³ããã€ã³ãã¯ããŠãŒã¶ãŒå ¥åããŒã¿ãæ€èšŒãªãã«SQLã«æž¡ããšãã€ã³ãžã§ã¯ã·ã§ã³ã®ãšã³ããªãã€ã³ããšãªãå¯èœæ§ããããŸãããããã®ãã¹ãäœç³»çã«ãã¹ãããããšã§ãã³ãŒãã¬ãã¥ãŒã ãã§ã¯çºèŠã§ããªãè匱æ§ãçºèŠãããã培åºããè©äŸ¡ãå¯èœã«ãªããŸãã
æ¹åã®ããã®çºèŠäºé ã®ææžåãšåªå é äœä»ã
æ€åºã¯æåã®ã¹ãããã«éããŸããã广çãªä¿®åŸ©ã¯ãè匱æ§ãæç¢ºã«ææžåããåªå é äœãä»ããããšã«ããã£ãŠããŸããããŒã ã¯ãè匱æ§ã®ããã³ãŒãããªã¹ã¯ã®æ§è³ªãæšå¥šãããç·©åæŠç¥ãªã©ãçºèŠããè匱æ§ã®è©³çްãåç®æã«èšé²ããå¿ èŠããããŸããææžåããããšã§ã修埩ãæççã§ã¯ãªããäœç³»çãã€å æ¬çã«è¡ãããããã«ãªããŸãã
ããšãã°ãã¬ã³ãŒãã«ã¯æ¬¡ã®ãããªå 容ãå«ãŸããŸãã
- æåšå°: ããã°ã©ã XYZãè¡ 150
- åé¡: æ€èšŒãããŠããªããŠãŒã¶ãŒåãé£çµããåçSQL
- ãªã¹ã¯: äžæ£ãªããŒã¿ã¢ã¯ã»ã¹ã«ã€ãªããSQLã€ã³ãžã§ã¯ã·ã§ã³
- ãããã: ãã¹ã倿°ãšå ¥åæ€èšŒã䜿çšããŠãã©ã¡ãŒã¿åãããã¯ãšãªã«çœ®ãæããŸã
åªå é äœä»ããåæ§ã«éèŠã§ãããã¹ãŠã®è匱æ§ãåããªã¹ã¯ã䌎ãããã§ã¯ãªããããããŒã ã¯ãŸãæ©å¯ããŒã¿ãæ±ãã³ãŒããé »ç¹ã«å®è¡ãããã³ãŒãã«éç¹ã眮ãå¿ èŠããããŸããã¬ã¬ã·ãŒã·ã¹ãã ã¯ã¡ã³ããã³ã¹ã®ããã®ãªãœãŒã¹ãéãããŠããããšãå€ããããæããªã¹ã¯ã®é«ãåé¡ããåãçµãããšãäžå¯æ¬ ã§ãã
SQLã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ã«é¢ããæç¢ºã§å®çšçãªèšé²ãç¶æããããšã§ãçµç¹ã¯ä¿®åŸ©ãããžã§ã¯ãããã广çã«èšç»ããããŒã éã®é£æºã匷åããéèŠãªæ¥åãäžæããããšãªãé倧ãªè匱æ§ãžã®å¯ŸåŠã確å®ã«è¡ãããšãã§ããŸãããã®ã¢ãããŒãã¯ãæ€åºãžã®åãçµã¿ãæ°žç¶çãªã»ãã¥ãªãã£æ¹åãžãšå°ããŸãã
COBOL-DB2ã«ãããäºé²ã®ãã¹ããã©ã¯ãã£ã¹
COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ãSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æããä¿è·ããã«ã¯ãåã ã®åé¡ã«ããããåœãŠãã ãã§ã¯äžååã§ããè匱æ§ãããããçºçããªãããã«ããã匷åã§äžè²«æ§ã®ããéçºãã©ã¯ãã£ã¹ãæ¡çšããå¿ èŠããããŸããã¬ã¬ã·ãŒã·ã¹ãã ã«ã¯ç¹æã®èª²é¡ããããŸãããéçºè ã¯å®èšŒæžã¿ã®ææ³ãé©çšããããšã§ãã³ãŒãããŒã¹å šäœã®ã»ãã¥ãªãã£ãåäžããããªã¹ã¯ã軜æžããããšãã§ããŸãããããã®ãã¹ããã©ã¯ãã£ã¹ãé©çšããããšã§ãã¢ããªã±ãŒã·ã§ã³ã«ã¬ãžãªãšã³ã¹ïŒå埩åïŒãæ§ç¯ãããæ»æè ã«ãšã£ãŠé åçãªæšçãšã¯å€§ããç°ãªããŸãã
ãã©ã¡ãŒã¿åãããã¯ãšãªãšãã¹ã倿°ã®äœ¿çš
COBOL-DB2ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ãé²ãæã广çãªæŠç¥ã®äžã€ã¯ããã¹ã倿°ãçšãããã©ã¡ãŒã¿åã¯ãšãªã®äœ¿çšã§ããé£çµã«ãã£ãŠçµã¿ç«ãŠãããåçSQLãšã¯ç°ãªãããã©ã¡ãŒã¿åã¹ããŒãã¡ã³ãã¯SQLã³ãã³ãæ§é ãšããŒã¿å€ãåé¢ããŸããDB2ã¯ãããã®ã¹ããŒãã¡ã³ããäºåã«æºåããããšã§ããŠãŒã¶ãŒå ¥åã«ãã£ãŠæå³ããã³ãã³ãã倿Žãããªãããã«ããŸãã
å®å šãªãã¿ãŒã³ã¯æ¬¡ã®ããã«ãªããŸãã
EXEC SQL
SELECT * FROM CUSTOMERS WHERE NAME = :USER-NAME
END-EXEC.
ããã§ã¯ã :USER-NAME å®è¡æã«å®å
šã«ãã€ã³ãããããã¹ã倿°ã§ãããã®ã¢ãããŒãã«ãããæ»æè
ãæªçšã§ããæååé£çµãäžèŠã«ãªããŸããããšããŠãŒã¶ãŒãæªæã®ããå
¥åãè¡ã£ããšããŠããããã¯å®è¡ã³ãŒãã§ã¯ãªããªãã©ã«å€ãšããŠæ±ãããŸããCOBOL-DB2ã·ã¹ãã ãä¿å®ããããŒã ã¯ãå¯èœãªéãåçSQLããã¹ã倿°ãã¿ãŒã³ã«äœç³»çã«çœ®ãæããå¿
èŠããããŸãããã®æ¹æ³ãéçºè
ã«ãã¬ãŒãã³ã°ããæšæºçãªéçšæé ãšããŠç¢ºå®ã«å®çãããããšãåæ§ã«éèŠã§ãã
å ¥åæ€èšŒãšãã¯ã€ããªã¹ãæŠç¥
ãã©ã¡ãŒã¿åãããã¯ãšãªã ãã§ã¯äžååã§ããæåŸ ãããå®å šãªå€ã ããã·ã¹ãã ã«å ¥åãããããã«ããããã«ã¯ãå ¥åæ€èšŒãäžå¯æ¬ ã§ããCOBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã¯ããªã³ã©ã€ã³ãã©ãŒã ãããããããã»ã¹ãŸã§ãããŸããŸãªå ¥åãœãŒã¹ãšããåãããããšããããããŸããããŒã¿ãé©åã«æ€èšŒãããŠããªãå Žåããããã®ãšã³ããªãã€ã³ãã¯ããããã€ã³ãžã§ã¯ã·ã§ã³ãã¯ãã«ãšãªãå¯èœæ§ããããŸãã
广çãªæ€èšŒãšã¯ã蚱容ãããå ¥åå 容ã«ã€ããŠå³æ Œãªã«ãŒã«ãå®çŸ©ããããšãæå³ããŸããäŸãã°ããã£ãŒã«ãã«ã¢ã«ãã¡ãããæåã®ã¿ãå ¥åããå¿ èŠãããå Žåã¯ããã以å€ã®æåã¯æåŠããŸããèš±å¯ãããå€ãæç€ºçã«æå®ãããã¯ã€ããªã¹ãã¯ãæ¢ç¥ã®äžæ£ãªãã¿ãŒã³ããã©ãã¯ãªã¹ãã«ç»é²ãããããã¯ããã«å®å šã§ãããã©ãã¯ãªã¹ãã«ç»é²ãããšãæ»æè ã¯å€ãã®å Žåããã©ãã¯ãªã¹ããåé¿ã§ããŸãã
COBOL ã§ã®æ€èšŒã®äŸã¯æ¬¡ã®ããã«ãªããŸãã
IF USER-NAME NOT ALPHABETIC
MOVE 'INVALID INPUT' TO ERROR-MSG
GO TO ERROR-HANDLER
END-IF.
ãã¹ãŠã®ãŠãŒã¶ãŒå ¥åã«å¯ŸããŠå³æ Œãªãã§ãã¯ã宿œããããšã§ãéçºè ã¯æå®³ãªããŒã¿ãSQLå®è¡æ®µéã«å°éããã®ãé²ãããšãã§ããŸãããã®ã¢ãããŒãã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãå€§å¹ ã«äœæžãããšåæã«ãå šäœçãªããŒã¿å質ãšã·ã¹ãã ã®ä¿¡é Œæ§ãåäžãããŸãã
å¯èœãªéãåçSQLã®äœ¿çšãæå°éã«æãã
åçSQLã¯æè»æ§ãæäŸããŸãããæ éã«äœ¿çšããªããšé倧ãªãªã¹ã¯ããããããŸããå€ãã®COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéçSQLããã©ã¡ãŒã¿åãããSQLã§ååãªå Žåã§ããåçSQLãé床ã«äœ¿çšãããŠããŸããåçSQLãžã®äŸåãæžããããšã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãæå°éã«æããããã®åŒ·åãªæŠç¥ã§ãã
ããŒã ã¯ã³ãŒããç£æ»ããåçSQLãäžèŠãªç®æãç¹å®ããå¿ èŠããããŸããäŸãã°ãåºå®æ§é ã§äºæž¬å¯èœãªãã©ã¡ãŒã¿ãæã€ã¯ãšãªã¯ãã»ãšãã©ã®å Žåããã¹ã倿°ã䜿çšããéçSQLã§æžãæããããšãã§ããŸããæè»ãªã¬ããŒãèŠä»¶ãªã©ãåçSQLãé¿ããããªãå Žåã§ããå³å¯ãªå ¥åæ€èšŒãšããªãã¢ãã¹ããŒãã¡ã³ãã®äœ¿çšã念é ã«çœ®ããæ éã«èšèšããå¿ èŠããããŸãã
åçSQLãæå°éã«æããããšã¯ãæ»æå¯Ÿè±¡é åãæžããã ãã§ãªããã¡ã³ããã³ã¹ãç°¡çŽ åããŸããéçã¯ãšãªã¯èªã¿åãããã¹ãããããŠæ£ç¢ºæ§ã®æ€èšŒã容æã§ãããããã»ãšãã©ã®å Žåã«å¥œãŸããŸãã
DB2 ã«ãããæå°æš©éã¢ã¯ã»ã¹å¶åŸ¡ã®å®è£
å®ç§ãªå ¥åæ€èšŒãšå®å šãªã¯ãšãªæ§ç¯ãåããŠããŠããããŒã¿ããŒã¹ã¢ã¯ã»ã¹å¶åŸ¡ã¯éèŠãªæåŸã®é²åŸ¡ç·ãšãªããŸããæå°æš©éã®ååã«ãããåãŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã¯ãããããã®åœ¹å²ã«å¿ èŠãªããŒã¿ãšæäœã®ã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
DB2ã·ã¹ãã ã®å Žåãããã¯åããã°ã©ã ããŠãŒã¶ãŒããŸãã¯ãµãŒãã¹ã¢ã«ãŠã³ãã«å¯ŸããŠæ£ç¢ºãªæš©éãå®çŸ©ããããšãæå³ããŸããæ¬¡ã®ãããªåºç¯ãªæš©éãä»äžããããšã¯é¿ããŠãã ããã DBADM or ALL PRIVILEGES 絶察ã«å¿
èŠãªå Žåãé€ããã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«å¿
èŠãªç¹å®ã®ããŒãã«ããã¥ãŒããŸãã¯ã¹ãã¢ãããã·ãŒãžã£ãžã®ã¢ã¯ã»ã¹ãå¶éããŠãã ããã
å ·äœçãªäŸãæããŸããšã以äžã®éãã§ãã
GRANT SELECT ON CUSTOMERS TO APP-USER;
ãã®ã¢ãããŒãã«ãããããšãã€ã³ãžã§ã¯ã·ã§ã³æ»æãæåããå Žåã§ããæœåšçãªè¢«å®³ãæå°éã«æããããšãã§ããŸããè匱æ§ãæªçšããæ»æè ã¯ããã®ã¢ã«ãŠã³ãã«èš±å¯ãããŠããæå°éã®ããŒã¿ãæäœã«ããã¢ã¯ã»ã¹ã§ããŸãããããŒã¿ããŒã¹æš©éã宿çã«ç£æ»ããããšã§ãæš©éã®æ¡å€§ã«ãã£ãŠæéã®çµéãšãšãã«ãããã®å®å šçãæãªãããã®ãé²ãããšãã§ããŸãã
æå°æš©éã®ååãä»ã®å®å šãªã³ãŒãã£ã³ã°ææ³ãšäœµããŠå®æœããããšã§ãçµç¹ã¯éå±€åãããé²åŸ¡ãæ§ç¯ããSQL ã€ã³ãžã§ã¯ã·ã§ã³æ»æãæåããå¯èœæ§ãå€§å¹ ã«äœæžããŸãã
æ€åºãšä¿®åŸ©ã®èªåå SMART TS XL
SQLã€ã³ãžã§ã¯ã·ã§ã³ã®é²æ¢ã«ã¯æåã®ææ³ãšãã¹ããã©ã¯ãã£ã¹ãäžå¯æ¬ ã§ãããå€§èŠæš¡ã§è€éãªCOBOL-DB2ã³ãŒãããŒã¹ã管çããã«ã¯ååã§ã¯ãªãããšããããããŸããã¬ã¬ã·ãŒã·ã¹ãã ã«ã¯ãæ°å幎ã«ããã£ãŠè€æ°ã®ããŒã ã«ãã£ãŠéçºãããæ°åè¡ã®ã³ãŒããå«ãŸããŠããå ŽåããããŸãããã¹ãŠã®ã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãæåã§ç¹å®ããã®ã¯æéããããããšã©ãŒãçºçãããããªããŸããèªååã¯ãè匱æ§ãäœç³»çã«ã¹ãã£ã³ããçµæçãªå€æŽã远跡ããä¿®åŸ©äœæ¥ãã¬ã€ãããããšã§ããã®ã®ã£ãããåããŸãã SMART TS XL ã¯ãCOBOL-DB2 ç°å¢ã«ããããããã®èª²é¡ãããŒã ã管çã§ããããã«ç¹å¥ã«èšèšãããŠãããã¡ã€ã³ãã¬ãŒã ã¢ããªã±ãŒã·ã§ã³ã®åºæã®èŠä»¶ã«åãããŠèª¿æŽãããé«åºŠãªéçåææ©èœãæäŸããŸãã
èªå®æ¡ä»¶ SMART TS XL COBOL-DB2 ã® SQL ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã®ã¹ãã£ã³
SMART TS XL COBOL-DB2ããã°ã©ã ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãç¹å®ããããã«ã詳现ãªéçã³ãŒãè§£æãå®è¡ããŸããäžè¬çãªã¹ãã£ã³ããŒã«ãšã¯ç°ãªããåã蟌ãŸããDB2 SQLæãå«ãCOBOLã³ãŒãã®æ§æãšæ§é ãçè§£ããŸããã³ãŒãããã现ããªã¬ãã«ã§è§£æããããšã«ããã SMART TS XL åç㪠SQL æ§ç¯ãã¿ãŒã³ãæååé£çµã®äžé©åãªäœ¿çšãããã³ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã«ã€ãªããå¯èœæ§ã®ããå®å šã§ãªã倿°ãã€ã³ãã£ã³ã°ãèå¥ã§ããŸãã
ãŸãããã©ã¡ãŒã¿ãã€ã³ãã£ã³ã°ã®ãªãããªãã¢ãã¹ããŒãã¡ã³ãã®å®å šã§ãªã䜿çšãæ€åºããæœåšçãªã€ã³ãžã§ã¯ã·ã§ã³ãã¯ãã«ãéçºè ã«èŠåããŸãããã®ã¬ãã«ã®ç²ŸåºŠã¯ãSQLãããžãã¹ããžãã¯ãšæ·±ã絡ã¿åã£ãŠããããšãå€ããæåã§ã¬ãã¥ãŒããã®ãå°é£ãªã¡ã€ã³ãã¬ãŒã ç°å¢ã§ã¯éåžžã«éèŠã§ããã³ãŒãããŒã¹å šäœãäœç³»çã«ã¹ãã£ã³ããããšã§ã SMART TS XL é ããæ³šå°ãªã¹ã¯ãèŠéããªãããã«ããŸãã
COBOL-DB2 åæã®äž»ãªæ©èœ (ãã¿ãŒã³èªèãããŒã¿ãããŒè¿œè·¡)
ã®äžã€ SMART TS XLã®æã匷åãªæ©èœã¯ãCOBOL-DB2ç¹æã®é«ãªã¹ã¯ãªã³ãŒãã£ã³ã°ãã¿ãŒã³ãèªèããèœåã§ãããã®ããŒã«ã«ã¯ãæ¢ç¥ã®å®å šã§ãªããã¿ãŒã³ãšãå®éã®ã¡ã€ã³ãã¬ãŒã éçºãã©ã¯ãã£ã¹ãåæ ããã«ã¹ã¿ãã€ãºå¯èœãªã«ãŒã«ãè±å¯ã«åé²ããã©ã€ãã©ãªãå«ãŸããŠããŸããé£çµãããSQLæååããµãã¿ã€ãºãããŠããªããŠãŒã¶ãŒå ¥åããã¹ã倿°ã®äžæŽåãªäœ¿çšãšãã£ãåé¡ãç¹å®ããŸãã
ãã¿ãŒã³ãããã³ã°ãè¶ ããŠã SMART TS XL é«åºŠãªããŒã¿ãããŒè§£æãå®è¡ããŸããã€ãŸãããŠãŒã¶ãŒå ¥åãã³ãŒãå ãã©ã®ããã«ç§»åããããç°ãªãããã°ã©ã ãã¢ãžã¥ãŒã«éã§ãã£ãŠã远跡ãããµãã¿ã€ãºãããŠããªãç¶æ ã§SQLå®è¡ãã€ã³ãã«å°éããå¯èœæ§ããããã©ããã倿ããŸããäŸãã°ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ããå ¥åããã倿°ããåŸã«EXEC SQLãããã¯ã§æ€èšŒãªãã§äœ¿çšãããŠãããã©ãããæ€åºã§ããŸãã
EXEC SQL
PREPARE DYN-STMT FROM :SQL-COMMAND
END-EXEC.
ãã®ããŒã«ã¯ããããã®ããŒã¿ ãããŒãåæããããšã§ãè匱æ§ãã©ãã«ååšãããã ãã§ãªãããããã©ã®ããã«æªçšãããå¯èœæ§ãããããããŒã ãçè§£ããã®ã«åœ¹ç«ã¡ãã¢ããªã±ãŒã·ã§ã³ ã»ãã¥ãªãã£ã®ããå æ¬çãªãã¥ãŒãæäŸããŸãã
ã¬ã€ãä»ã修埩 SMART TS XL
è匱æ§ãç¹å®ããããšã¯æŠãã®ååã«éããŸãããè匱æ§ã广çã«ä¿®æ£ããããšãåæ§ã«éèŠã§ãã SMART TS XL COBOL-DB2ã³ãŒãã«åãããå®çšçãªä¿®æ£ã¬ã€ãã³ã¹ãæäŸããããšã§ãæ€åºã«ãšã©ãŸãããããé«åºŠãªæ©èœãæäŸããŸããè匱æ§ããã©ã°ä»ãããããšãããŒã«ã¯ãªããªã¹ã¯ãé«ãã®ãã説æããã³ãŒãã®æ£ç¢ºãªç®æã衚瀺ããåé¡ã解決ããããã®å ·äœçãªå€æŽãææ¡ããŸãã
ããšãã°ã SMART TS XL å®å šã§ãªãæååé£çµãããã¹ã倿°ã䜿çšãããã©ã¡ãŒã¿åãããEXEC SQLãããã¯ã«çœ®ãæããããšãæšå¥šããå ŽåããããŸãããŸããå ¥åæ€èšŒã匷åããå¿ èŠãããç®æããåçSQLã®äœ¿çšãæå°éã«æããå¿ èŠãããç®æã瀺ããŸãããã®ç確ãªã¬ã€ãã³ã¹ãæäŸããããšã§ã SMART TS XL ã»ãã¥ãªãã£ã®å°éå®¶ã§ã¯ãªãããéèŠãªã¬ã¬ã·ãŒ ã·ã¹ãã ã®ä¿å®ãæ åœããéçºè ã®åŠç¿æ²ç·ãççž®ãããŸãã
ãã®ã¬ã€ãä»ã修埩ã®ãµããŒãã«ãããä¿®æ£ã®äžè²«æ§ãšå¹æããã¹ã ãã©ã¯ãã£ã¹ã«æ²¿ã£ããã®ã確ä¿ãããå°æ¥ã®æŽæ°ã§è匱æ§ãåå°å ¥ãããå¯èœæ§ãäœæžãããŸãã
ã³ã³ãã©ã€ã¢ã³ã¹ãšç£æ»ã®ããã®ã¬ããŒãã®çæ
ã»ãã¥ãªãã£ãšã¯ãã³ãŒããä¿®æ£ããããšã ãã§ã¯ãããŸãããã·ã¹ãã ãé©åã«ä¿å®ããã³ç£èŠãããŠããããšãé¢ä¿è ã«ç€ºãããšãå¿ èŠã§ãã SMART TS XL 匷åãªã¬ããŒãæ©èœãå«ãŸããŠãããããŒã ã SQL ã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ã軜æžããããã®åãçµã¿ãææžåããã®ã«åœ¹ç«ã¡ãŸãã
ãããã®ã¬ããŒãã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- ç¹å®ãããè匱æ§ã®ãªã¹ããšé倧床è©äŸ¡
- å±éºãªã³ãŒããã¿ãŒã³ã®å Žæ
- 修埩掻åã®ç¶æ³
- æéã®çµéãšãšãã«ãªã¹ã¯ãæžå°ããããšãç€ºãæŽå²çåŸå
ãã®ãããªææžã¯ã瀟å ã¬ãã¥ãŒãå€éšç£æ»ããããŠèŠå¶éµå®ã®èŠä»¶ã«ãããŠéåžžã«è²Žéã§ããã»ãã¥ãªãã£æ¹åã®æç¢ºã§å®çšçãªèšŒæ ãæäŸããããšã§ã SMART TS XL çµç¹ã顧客ãèŠå¶åœå±ãçµå¶å¹¹éšãšã®ä¿¡é Œãç¶æããã®ã«åœ¹ç«ã¡ãŸãã
ãããã®ã¬ããŒãäœæã¿ã¹ã¯ãèªååããããšã§ãéçºããŒã ã®æäœæ¥ã«ããè² æ ã軜æžãããå®å šã§ä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ã®æäŸã«éäžã§ããããã«ãªããŸãããã®ããã«ããŠã SMART TS XL æè¡çãªä¿®åŸ©ã ãã§ãªããçŸä»£ã®ã¡ã€ã³ãã¬ãŒã ã»ãã¥ãªãã£ã«äžå¯æ¬ ãªãããåºç¯ãªã¬ããã³ã¹ãšã³ã³ãã©ã€ã¢ã³ã¹ã®ããã»ã¹ããµããŒãããŸãã
ã±ãŒã¹ã¹ã¿ãã£: SQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã®ä¿®æ£
COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³åé¡ãã©ã®ããã«çºçããã©ã®ããã«å¹æçã«ä¿®æ£ã§ããããçè§£ããã«ã¯ãå®äŸãéåžžã«è²Žéã§ããéèŠãªæ¥çã®å€ãã®ã¬ã¬ã·ãŒã·ã¹ãã ã«ã¯ãã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãåºãæ¡çšããããã£ãšåã«äœæãããè匱ãªã³ãŒããå«ãŸããŠããŸããå®éã®è匱æ§ãã©ã®ããã«çºèŠãåæãä¿®æ£ãããããæ€èšŒããããšã§ãããŒã ã¯äœç³»çãªæ€åºã®äŸ¡å€ãšãææ°ã®ããŒã«ããã©ã¯ãã£ã¹ã®éèŠæ§ãããæ·±ãçè§£ããããšãã§ããŸãã
ã¬ã¬ã·ãŒ COBOL-DB2 ã³ãŒãã«ãããå®éã® SQL ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã®ç¹å®
顧客ãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ããµããŒãããããã«éçºãããCOBOL-DB2ããã°ã©ã ãèããŠã¿ãŸãããããã®ã³ãŒãã«ã¯ã端æ«ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠåä¿¡ãããŠãŒã¶ãŒå ¥åã«åºã¥ããŠé¡§å®¢ã¬ã³ãŒããæ€çŽ¢ããæ©èœãå«ãŸããŠããŸããå ã ã¯æè»æ§ãéèŠããŠæ§ç¯ãããŠãããé£çµãããæååããçæãããåçSQLã䜿çšããŠããŸãã
MOVE 'SELECT * FROM CUSTOMER WHERE NAME = ''' TO SQL-CMD.
STRING USER-NAME DELIMITED BY SIZE INTO SQL-CMD.
宿çãªã¬ãã¥ãŒã«ãããŠããã®ãã¿ãŒã³ã¯å³åº§ã«èŠåãçºããŸãããŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããã©ã¡ãŒã¿åãªãã§SQLã³ãã³ãã«çŽæ¥æ¿å ¥ããããããæ»æè ã¯æ¬¡ã®ãããªå ¥åã现工ããããšãã§ããŸãã
' OR '1'='1
ãã®å ¥åã¯WHEREå¥ã倿Žããã¯ãšãªããã¹ãŠã®ã¬ã³ãŒããè¿ãããã«ãªããŸãããã®ãããªæ¬ é¥ã¯ãé¡§å®¢ã®æ©å¯æ å ±ãžã®äžæ£ã¢ã¯ã»ã¹ã«ã€ãªããå¯èœæ§ããããããŒã¿ä¿è·èŠä»¶ã«éåããŸãããã®è匱æ§ãæ©æã«èªèããããšã¯ãç¹ã«ã³ãŒããäœå¹Žãã®éã粟æ»ãããããšãªãæ°ä»ãããã«å®è¡ãããŠããå¯èœæ§ããããããæªçšãé²ãäžã§éåžžã«éèŠã§ãã
èªååæãé©çšããŠåé¡ãç¹å®ãã
è匱æ§ãæåã§æ€åºããããšã¯å¯èœã§ãããç¹ã«å€§èŠæš¡ãªã³ãŒãããŒã¹ã§ã¯æéãããããŸãã SMART TS XL ãã®ããã»ã¹ãå¹çåããŸãããã®ããŒã«ã¯COBOL-DB2ã¢ããªã±ãŒã·ã§ã³å šäœãã¹ãã£ã³ãããŠãŒã¶ãŒå ¥åãšã®çŽæ¥çãªæååé£çµãå«ãSQLã³ãã³ãæ§é ãèå¥ããŸãã
åé¡ã®ããè¡ã«ãã©ã°ãä»ãã詳现ãªèª¬æãæäŸããŸãã
Potential SQL Injection Risk: Dynamic SQL constructed via concatenation.
Location: Program CUSTOMER-SEARCH, Line 145.
ç¹å®ã®ã³ãŒãè¡ã匷調衚瀺ããã ãã§ãªãã SMART TS XL ããŒã¿ãããŒè¿œè·¡ãå®è¡ããUSER-NAMEã端æ«å ¥åããååŸããããã®ã§ããããšã確èªããŸããæ€èšŒããµãã¿ã€ãºåŠçã¯äžåäžèŠã§ãããã®ç²ŸåºŠã«ãããããŒã ã¯å¿ èŠãªç®æã«ç確ã«ä¿®æ£äœæ¥ã«éäžã§ããå€§å¹ ãªæéç¯çŽãšãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«ãããåæ§ã®åé¡ãèŠèœãšãå¯èœæ§ã®äœæžãå®çŸããŸãã
ã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšåŒ·åã®ããã«åãããæé
ç¹å®ããããã修埩èšç»ã§ã¯ãå®å šã§ãªãåçSQLãããã¹ã倿°ã䜿çšããå®å šãªãã©ã¡ãŒã¿åãããã¢ãããŒãã«çœ®ãæããŸãããªãã¡ã¯ã¿ãªã³ã°ãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
EXEC SQL
SELECT * FROM CUSTOMER WHERE NAME = :USER-NAME
END-EXEC.
ãã®å€æŽãå®è£ ããåã«ãããŒã ã¯å ¥åæ€èšŒã匷åããã¢ã«ãã¡ãããæåã®ã¿ãåãå ¥ããããããã«ããŸããã
IF USER-NAME NOT ALPHABETIC
MOVE 'INVALID INPUT' TO ERROR-MSG
GO TO ERROR-HANDLER
END-IF.
ãããã®å€æŽã«ãããæªæã®ããå ¥åã«ããSQLã³ãã³ãæ§é ã®å€æŽãé²ããã€ã³ãžã§ã¯ã·ã§ã³ãã¯ãã«ãæé€ããŸãããã®åŸãåºç¯ãªãã¹ãã宿œããã¢ããªã±ãŒã·ã§ã³ãæªæã®ããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®è©Šã¿ã黿¢ããªãããæ£åžžã«åäœãç¶ããããšãæ€èšŒããŸãã倿Žå 容ãããã¥ã¡ã³ãåããããšã§ãå°æ¥ã®éçºè ããªãã¡ã¯ã¿ãªã³ã°ã®çç±ãšã»ãã¥ãªãã£åŒ·åã®ä»çµã¿ãçè§£ã§ããããã«ãªããŸãã
修埩åŸã®ææïŒããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ã®åäž
ä¿®æ£åŸãããŒã ã¯æç¢ºãªå¹æã確èªããŸããããŠãŒã¶ãŒå ¥åã«ããSQLããžãã¯ã®å€æŽãäžå¯èœã«ãªã£ããããã»ãã¥ãªãã£ãªã¹ã¯ãå€§å¹ ã«è»œæžãããŸãããé¡§å®¢ã®æ©å¯ããŒã¿ã¯ä¿è·ãããçµç¹ã¯èŠå¶ã³ã³ãã©ã€ã¢ã³ã¹ãç¶æããã³ã¹ãã®ããã䟵害ãåé¿ã§ããŸããèªåã¹ãã£ã³ã«ããåé¡ã解決ãããããšã確èªãããã³ãŒãããŒã¹å šäœã«ãããé«ãªã¹ã¯ãã¿ãŒã³ã®æžå°ãæããã«ãªããŸããã
ããã©ãŒãã³ã¹ããããã«åäžããŸããåçSQLæ§æãåé€ããããšã§ãå®è¡æã«å¯å€é·SQLæååãæºåããã³è§£æãããªãŒããŒããããåæžãããŸãã代ããã«ãDB2ã¯éçã§ãã©ã¡ãŒã¿åãããã¯ãšãªããã广çã«æé©åã§ããŸããããŒã ã¯ã³ãŒãå質ã«èªä¿¡ãæã€ããšãã§ãããããã®æ¹åã¯ãDBXNUMXã«ãã£ãŠçæããã詳现ãªã¬ããŒããéããŠå®èšŒã§ããŸãã SMART TS XLå éšã®ã»ãã¥ãªãã£ã¬ããã³ã¹ãšå€éšã®ã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã®äž¡æ¹ããµããŒãããŸãã
æ€åºãä¿®åŸ©ãæ€èšŒã«å¯ŸããŠæ§é åãããã¢ãããŒããæ¡çšããããšã§ãçµç¹ã¯æãå€ã COBOL-DB2 ã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŠããçŸä»£ã®ããžãã¹ ããŒãºã«å¯Ÿå¿ã§ããå®å šã§ä¿å®ããããä¿¡é Œæ§ã®é«ãã·ã¹ãã ã«å€æã§ããŸãã
ç¶ç¶çãªã»ãã¥ãªãã£æŠç¥
COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ãSQLã€ã³ãžã§ã¯ã·ã§ã³ããä¿è·ããããšã¯ãäžåºŠããã®äœæ¥ã§ã¯ãªããç¶ç¶çãªåãçµã¿ãå¿ èŠã§ããã¬ã¬ã·ãŒã·ã¹ãã ã¯å€ãã®å Žåããã£ãããšé²åããŸãããæ°æ©èœãã¡ã³ããã³ã¹ã¢ããããŒãããããŠãŠãŒã¶ãŒèŠä»¶ã®å€åã«ãã£ãŠãæéã®çµéãšãšãã«ãªã¹ã¯ãåå°å ¥ãããå¯èœæ§ããããŸããæç¶å¯èœãªã»ãã¥ãªãã£ãå®çŸããã«ã¯ããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«ã«ãã¹ããã©ã¯ãã£ã¹ãçµã¿èŸŒã¿ãèªååãããç£èŠããŒã«ã掻çšããéçºããŒã å šäœã«ã»ãã¥ãªãã£éèŠã®æåãéžæããããšãéèŠã§ããããã¢ã¯ãã£ããªæŠç¥ãæ¡çšããããšã§ãçµç¹ã¯é²åããè åšã«å¯ŸããŠãéèŠãªã¡ã€ã³ãã¬ãŒã ã¢ããªã±ãŒã·ã§ã³ã®èé害æ§ã確ä¿ã§ããŸãã
ã¡ã€ã³ãã¬ãŒã ãããžã§ã¯ãã® CI/CD ãžã®éçè§£æã®çµ±å
çŸä»£ã®éçºããŒã ã§ã¯ããã«ãããã¹ãããããã€ã¡ã³ããèªååããããã«ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšç¶ç¶çããªããªãŒïŒCI/CDïŒãã€ãã©ã€ã³ã掻çšããã±ãŒã¹ãå¢ããŠããŸããCOBOL-DB2ãããžã§ã¯ãã§ã¯ããããã®ãã€ãã©ã€ã³ã«éçã³ãŒãè§£æãçµ±åããããšã§ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã«å¯Ÿããå ç¢ãªé²åŸ¡ãå®çŸã§ããŸããéçè§£æããŒã«ã¯ãæ°èŠãŸãã¯å€æŽãããã³ãŒãã«å±éºãªãã¿ãŒã³ããªããèªåçã«ã¹ãã£ã³ãã倿Žãæ¬çªç°å¢ã«ãããã€ãããåã«ã»ãã¥ãªãã£åºæºãé©çšããŸãã
äžè¬ç㪠CI/CD ã¯ãŒã¯ãããŒã«ã¯ãã³ãŒãã®ã³ãããåŸã«éçåæãå®è¡ããã¹ããããå«ãŸããå ŽåããããŸãã
step:
name: Static Code Analysis
command: run-analysis --target=COBOL
åæã«ãã£ãŠSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãç¹å®ãããå Žåããã€ãã©ã€ã³ã忢ããå®å šã§ãªãã³ãŒãã®é²è¡ã黿¢ã§ããŸãããã®ã¢ãããŒãã«ãããéçºè ã®çµéšã¬ãã«ã«é¢ããããããŒã å šäœã§äžè²«ããã»ãã¥ãªãã£å¯Ÿçã宿œã§ããŸãããŸããè匱æ§ãæ©æã«çºèŠããããšã§ä¿®æ£ã³ã¹ããåæžããã»ãã¥ã¢ãªéçºãåŸåãã«ãããæ¥ã ã®ã¯ãŒã¯ãããŒã«äžå¯æ¬ ãªèŠçŽ ãšããããšãã§ããŸãã
ã¬ã¬ã·ãŒã³ãŒãã®å®æçãªã»ãã¥ãªãã£ã¹ãã£ã³ã®ã¹ã±ãžã¥ãŒã«èšå®
é »ç¹ãªå€æŽããªãå Žåã§ããã¬ã¬ã·ãŒCOBOL-DB2ã·ã¹ãã ã¯å®æçãªã»ãã¥ãªãã£ã¬ãã¥ãŒã宿œããå¿ èŠããããŸããéçè§£æããŒã«ã¯ãããžãã¹ããŒãºã«å¿ããŠãæ¯é±ãæ¯æããŸãã¯ååæããšã«ãã³ãŒãããŒã¹å šäœã®å æ¬çãªã¹ãã£ã³ã宿çã«å®è¡ããããã«èšå®ããå¿ èŠããããŸãããããã®ã¹ãã£ã³ã«ãããã·ã¹ãã ã¢ããããŒããæ§æå€æŽããŸãã¯é²åããè åšã¢ãã«ã«ãã£ãŠããããããæ°ããªãªã¹ã¯ãç¹å®ã§ããŸãã
宿çãªã¹ãã£ã³ã«ãããã»ãã¥ãªãã£äœå¶ã®æšç§»ã«é¢ããè©³çŽ°ãªæ å ±ãåŸãããŸããããŒã ã¯ãæ€åºã»ä¿®åŸ©ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ã®æ°ãªã©ã®ææšã远跡ããããšã§ãç£æ»äººãçµå¶é£ãèŠå¶åœå±ã«ç¶ç¶çãªæ¹åãå®èšŒã§ããŸãããã®èŠåŸãç¶æããããšã§ãçµç¹ã¯æãå€ãå®å®ããã·ã¹ãã ã§ãã£ãŠããã»ãã¥ãªãã£ã®ç²ç¹ãšãªããªããã確ä¿ã§ããŸãã
ã¹ã±ãžã¥ãŒã«ã¹ãã£ã³ã¯ç¥èå ±æã«ã圹ç«ã¡ãŸããéçºè ã¯ã¬ããŒãã確èªããŠäžè¬çãªã³ãŒãã£ã³ã°ãšã©ãŒãææ¡ããã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ã匷åããã»ãã¥ãªãã£ãå°æ°ã®å°éå®¶ã®å°éæ¥åã§ã¯ãªããå ±æè²¬ä»»ãšããŠæããæåãç¯ãããšãã§ããŸãã
ã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãèªèã軜æžããããã®éçºããŒã ã®ãã¬ãŒãã³ã°
ãã¯ãããžãŒã ãã§ã¯ãç¥èè±å¯ãªäººæã广çã«æŽ»çšããªããã°ããœãããŠã§ã¢ã®ã»ãã¥ãªãã£ã確ä¿ããããšã¯ã§ããŸãããCOBOL-DB2éçºè ãSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã®ä»çµã¿ãã¬ã¬ã·ãŒãã¿ãŒã³ã®å±éºæ§ããããŠå®å šãªä»£æ¿ææ®µã®å®è£ æ¹æ³ãçè§£ã§ããããããã¬ãŒãã³ã°ãžã®æè³ã¯äžå¯æ¬ ã§ããããã¯ãæ°å幎ã®çµéšãæã¡ãªãããææ°ã®ã»ãã¥ãªãã£å¯Ÿçãžã®ç¥èãéãããŠããéçºè ãããŒã ã«æå±ããã¡ã€ã³ãã¬ãŒã ç°å¢ã§ã¯ç¹ã«éèŠã§ãã
ãã¬ãŒãã³ã° ã»ãã·ã§ã³ã§ã¯æ¬¡ã®ãããªãããã¯ãåãäžããŸãã
- å®å šã§ãªãåçSQLãã¿ãŒã³ã®ç¹å®
- ãã¹ã倿°ã䜿çšãããã©ã¡ãŒã¿åã¯ãšãªã®å®è£
- å ¥åã广çã«æ€èšŒããµãã¿ã€ãºãã
- DB2 èš±å¯ã«ãããæå°æš©éã®ååãçè§£ãã
ã¯ãŒã¯ã·ã§ãããã³ãŒãã¬ãã¥ãŒã»ãã·ã§ã³ãããã«ã¯çãããã¥ã¡ã³ãã¬ã€ããªã©ã掻çšããããšã§ãããŒã å šäœã®ã»ãã¥ãªãã£æèãé«ããããšãã§ããŸããéçºè ããªã¹ã¯ãæ©æã«èªèã§ããããã«ãªããšãããé©åãªèšèšå€æãå¯èœã«ãªããé·æçã«èŠãŠããå®å šãªã³ãŒãããŒã¹ã®æ§ç¯ã«è²¢ç®ã§ããããã«ãªããŸãã
ããŒã å šäœã§å®å šãªã³ãŒãã£ã³ã°æšæºãç¶æãã
COBOL-DB2ãããžã§ã¯ãã¯è€æ°ã®ããŒã ãšé·æã«ãããã³ãŒãããŒã¹ãé¢äžããããšãå€ããããäžè²«ããã»ãã¥ãªãã£æšæºãç¶æããããšãäžå¯æ¬ ã§ããçµç¹ã¯ãå®å šãªSQLã®äœ¿çšãå ¥åæ€èšŒãåçSQLã®ç®¡çãããŒã¿ããŒã¹æš©éã®èšå®ã«é¢ããæç¢ºãªã¬ã€ãã©ã€ã³ã確ç«ããå¿ èŠããããŸãããããã®æšæºã¯ææžåããã宿çã«ã¬ãã¥ãŒãããé²åããè åšãšãã¹ããã©ã¯ãã£ã¹ãåæ ããããã«æŽæ°ãããå¿ èŠããããŸãã
ãããã®æšæºãæœè¡ããã«ã¯ãéçºãã»ãã¥ãªãã£ãéçšããŒã éã®é£æºãå¿ èŠã§ãã宿çãªã³ãŒãã¬ãã¥ãŒãèªååããã CI/CDãã€ãã©ã€ã³ã«ãããéçè§£æããããŠå ±æç¥èãªããžããªã¯ãã¹ãŠãæŽåæ§ã®ç¶æã«åœ¹ç«ã¡ãŸããã»ãã¥ã¢ã³ãŒãã£ã³ã°ã®ãã©ã¯ãã£ã¹ãæšæºåããããšã§ãçµç¹ã¯ããŒã éã®ã¢ãããŒãã®äžè²«æ§ã®æ¬ åŠãç¥èã®ã®ã£ããã«ãã£ãŠè匱æ§ãèŠéãããå¯èœæ§ã軜æžã§ããŸãã
ãããã®æŠç¥ãé·æã«ããã£ãŠç¶æããããšã§ãæãè€éã§ããã·ã§ã³ã¯ãªãã£ã«ã«ãª COBOL-DB2 ã·ã¹ãã ã§ã SQL ã€ã³ãžã§ã¯ã·ã§ã³æ»æã«æµæããããžãã¹ç®æšãå®å šãã€ç¢ºå®ã«ãµããŒããç¶ããããšãã§ããããã«ãªããŸãã
SQLã€ã³ãžã§ã¯ã·ã§ã³ãã¡ã€ã³ãã¬ãŒã ã§æ ¹åŒ·ãè åšã§ããç¶ããçç±
COBOL-DB2ã¢ããªã±ãŒã·ã§ã³ãSQLã€ã³ãžã§ã¯ã·ã§ã³ããä¿è·ããããšã¯ãéèŠãªæ¥åãã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ã«äŸåããŠããçµç¹ã«ãšã£ãŠäžå¯æ¬ ãªè²¬ä»»ã§ãããããã®ç°å¢ã¯ãéè¡ãä¿éºãæ¿åºãå»çãšãã£ãéèŠãªããžãã¹æ©èœãæ¯ããŠããããšããããããŸãããããããã®å€ããšè€éãããã«ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãçŸä»£ã®ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãååã«çè§£ãããåã«æžãããã³ãŒããæ®ã£ãŠããŸããåçãªSQLçæãæåã«ããæååé£çµãäžååãªå ¥åæ€èšŒãªã©ãäžè¬çã§ãããæ»æè ãæ©å¯ããŒã¿ã䟵害ãããµãŒãã¹ã劚害ãã倧ããªæ©äŒãçã¿åºããŠããŸãã
SQLã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãSQLã³ãã³ããæ§ç¯ããã³å®è¡ããæ¹æ³ãæªçšãããããäŸç¶ãšããŠæ ¹åŒ·ãè åšã§ããå ¥ååŠçã«ãããããããªèŠèœãšãã§ããã壿» çãªäŸµå®³ã«ã€ãªããå¯èœæ§ããããŸããä¿è·æ©èœãçµã¿èŸŒãŸããæ°ãããã©ãããã©ãŒã ãšã¯ç°ãªããCOBOL-DB2ã·ã¹ãã ã§ã¯ãéçºè ãæåã§ã»ãã¥ãªãã£å¯Ÿçã宿œããããšãäžè¬çã§ãããããã®ãªã¹ã¯ã«å¯ŸåŠããã«ã¯ãå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ã峿 Œãªå ¥åæ€èšŒãæå°éã®æš©éã§ããŒã¿ããŒã¹ãæ§æããããšããããŠå®æçãªã³ãŒãã¬ãã¥ãŒãçµã¿åãããå¿ èŠããããŸãããããã®å¯Ÿçãéçºæåã«çµã¿èŸŒãããšã§ãçµç¹ã¯è匱æ§ãæ ¹åºããäœæžããããšãã§ããŸãã
èªååãããéçè§£æã¯ããããã®åãçµã¿ã«äžå¯æ¬ ãªé²åŸ¡å±€ã远å ããŸãã SMART TS XL éçºããŒã ã¯ãå€§èŠæš¡ã§è€éãªCOBOL-DB2ã³ãŒãããŒã¹ãäœç³»çã«ã¹ãã£ã³ããŠSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãæ€åºããå®å šã§ãªãã³ãŒãã£ã³ã°ãã¿ãŒã³ãç¹å®ããããŒã¿ãããŒã远跡ããããšã§ãæåã¬ãã¥ãŒã§ã¯èŠéãããå¯èœæ§ã®ããè匱æ§ãæ€åºã§ããŸããCI/CDãã€ãã©ã€ã³ãšæ¥åžžçãªã¡ã³ããã³ã¹ã¯ãŒã¯ãããŒã«èªååæãçµ±åããããšã§ãçµç¹ã¯æ°ããªãªã¹ã¯ãæ€ç¥ããæªçšãããåã«å¯ŸåŠããããšãã§ããŸãã詳现ãªã¬ããŒãæ©èœãšã¬ã€ãä»ãã®ä¿®åŸ©æ©èœã«ãããããŒã ã¯è匱æ§ãã©ãã«ååšããããæ£ç¢ºã«ææ¡ãã广çãªä¿®æ£æ¹æ³ãææ¡ã§ããŸãã
ç¶ç¶çãªã»ãã¥ãªãã£å¯Ÿçãšã¯ã仿¥ã®åé¡ã解決ããã ãã§ãªããå°æ¥ã®åé¡ãé²ãããã®ããã»ã¹ãšç¿æ £ãæ§ç¯ããããšã§ããçµç¹ã¯ã宿çãªã¹ãã£ã³ãäžè²«ããã³ãŒãã£ã³ã°æšæºããããŠéçºè ã®ãã¬ãŒãã³ã°ãåªå çã«å®æœãã匷åºãªã»ãã¥ãªãã£äœå¶ãé·æã«ããã£ãŠç¶æããå¿ èŠããããŸããèŠåŸããæåã®ãã©ã¯ãã£ã¹ãšé«åºŠãªèªååæãçµã¿åãããããšã§ãæãè€éã§ã¬ã¬ã·ãŒã·ã¹ãã ãå€ãCOBOL-DB2ç°å¢ã§ãã£ãŠããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã«å¯Ÿããèæ§ãé«ããéèŠãªããŒã¿ãä¿è·ããã³ã³ãã©ã€ã¢ã³ã¹ãç¶æããä»åŸäœå¹Žã«ãããã£ãŠé¡§å®¢ã®ä¿¡é Œãç¶æããããšãã§ããŸãã