星期一, 11月 06, 2023

2003-01-04 報表安全列三:如何限制指令 DLTSPLF 的使用, 防止使用者刪除其他人的報表 ?


報表安全列三:如何限制指令 DLTSPLF 的使用, 防止使用者刪除其他人的報表 ?

有鑑於 報表的安全性管理,iSeries(AS/400) 作業系統並未提供完善的保護,我將建議使用 VCP 命令語
法檢核程式來做安全空管,

報表安全系列一 :如何限制指令 WRKSPLF 的使用, 防止使用者察看全系統的報表 ?

報表安全系列二 :如何限制指令 DSPSPLF 的使用, 防止使用者於 WRKSPLF 畫面中瀏覽全系統的報表 ?

報表安全系列三 :如何限制指令 DLTSPLF  的使用, 防止使用者刪除其他人的報表 ? 

你是否常會遇到使用者反應他的報表不見了,有可能被其他有 *SPLCTL 權限的人刪除,
為了要防止這種情形發生,只能從命令檢核程式著手,此範例與其他相關報表命令
(WRKSPLF, DSPSPLF)的檢核程式一樣,限制除了 QSECOFR, QSYSOPR 之外,使
用者僅能刪除自己的報表,同樣也分 OS V5R1(含)以前及OS V5R2(含)以後的版本。

DLTSPLF 命令語法檢核程式 for V5R1

File  : QCLSRC
Member: DLTSPLFVC
Type  : CLP
OS version: V5R1 以前
Usage : CRTCLPGM mylib/DLTSPLFVC
        CHGCMD CMD(DLTSPLF) VLDCKR(mylib/DLTSPLFVC) 
        若執行有問題或不使用命令語法檢核程式時,執行
        CHGCMD CMD(DSPSPLF) VLDCKR(*NONE) 


  /*  Program : DLTSPLFVC                                       */
  /*  System  : iSeries 400 FOR V5R1                            */
  /*                                                            */
  /*  Validity Checking program for command DLTSPLF             */
  /*                                                            */
  /*  Example :   protecting an SPOOL From a USER               */
  /*                                                            */
  /*      CHGCMD CMD(DLTSPLF) VLDCKR(MYLIB/DLTSPLFVC)           */
  /*  To reset (in case you made errors) :                      */
  /*      CHGCMD CMD(DLTSPLF) VLDCKR(*NONE)                     */

 DSPSPLFVC:  PGM        PARM(&P1 &P2 &P3 &P4 &P5)

             DCL        VAR(&P1) TYPE(*CHAR) LEN(10)  /* FUNC    */
             DCL        VAR(&P2) TYPE(*CHAR) LEN(10)  /* FILE    */
             DCL        VAR(&P3) TYPE(*CHAR) LEN(26)  /* JOB     */
             DCL        VAR(&P4) TYPE(*CHAR) LEN(4)   /* SPLNBR  */
             DCL        VAR(&P5) TYPE(*CHAR) LEN(40)  /* SELECT  */
             DCL        VAR(&SPLUSR) TYPE(*CHAR) LEN(10)
             DCL        VAR(&USER) TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBNAME) TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBNBR) TYPE(*CHAR) LEN(6)

             RTVJOBA    JOB(&JOBNAME) USER(&USER) NBR(&JOBNBR)
             IF         (%SST(&P3 1 1) *EQ '*')  DO
                        CHGVAR     &SPLUSR &USER
                        CHGVAR     %SST(&P3  1  10) &JOBNAME
                        CHGVAR     %SST(&P3 11  10) &USER
                        CHGVAR     %SST(&P3 21   6) &JOBNBR
                 ENDDO
             ELSE                                +
                        CHGVAR     &SPLUSR %SST(&P3 11 10)

 /* USER QSECOFR, QSYSOPR UNLIMIT ACCESS SPOOLED FILE */
             IF         ((&USER *EQ 'QSECOFR') *OR +
                         (&USER *EQ 'QSYSOPR'))    +
                          THEN(GOTO OK)

 /* LIMIT ONLY SPOOLED CREATION USER CAN BROWSE OWN'S SPOOLED FILE */
             IF         COND(&USER *NE &SPLUSR) +
                          THEN(GOTO NOT_OK)

 OK:
             RETURN

 NOT_OK:     SNDPGMMSG  MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000' +
                          *CAT 'You are not authorized to spooled +
                          file' *BCAT &P2) MSGTYPE(*DIAG)

             SNDPGMMSG  MSGID( CPF0002 )                          +
                        MSGF( QSYS/QCPFMSG )                      +
                        MSGTYPE( *ESCAPE )

             ENDPGM



DLTSPLF 命令語法檢核程式 for V5R2

File  : QCLSRC
Member: DLTSPLFVC
Type  : CLP
OS version: V5R2 以後
Usage : CRTCLPGM mylib/DLTSPLFVC
        CHGCMD CMD(DLTSPLF) VLDCKR(mylib/DLTSPLFVC) 
        若執行有問題或不使用命令語法檢核程式時,執行
        CHGCMD CMD(DSPSPLF) VLDCKR(*NONE) 


  /*  Program : DLTSPLFVC                                       */
  /*  System  : iSeries 400 FOR V5R2                            */
  /*                                                            */
  /*  Validity Checking program for command DLTSPLF             */
  /*                                                            */
  /*  Example :   protecting an SPOOL From a USER               */
  /*                                                            */
  /*      CHGCMD CMD(DLTSPLF) VLDCKR(MYLIB/DLTSPLFVC)           */
  /*  To reset (in case you made errors) :                      */
  /*      CHGCMD CMD(DLTSPLF) VLDCKR(*NONE)                     */

 DSPSPLFVC:  PGM        PARM(&P1 &P2 &P3 &P4 &P5 &P6 &P7)

             DCL        VAR(&P1) TYPE(*CHAR) LEN(1)   /* FUNC    */
             DCL        VAR(&P2) TYPE(*CHAR) LEN(10)  /* FILE    */
             DCL        VAR(&P3) TYPE(*CHAR) LEN(26)  /* JOB     */
             DCL        VAR(&P4) TYPE(*CHAR) LEN(4)   /* SPLNBR  */
             DCL        VAR(&P5) TYPE(*CHAR) LEN(8)   /* SYSNAME */
             DCL        VAR(&P6) TYPE(*CHAR) LEN(6)   /* CRTDATE */
             DCL        VAR(&P7) TYPE(*CHAR) LEN(40)  /* SELECT  */
             DCL        VAR(&SPLUSR) TYPE(*CHAR) LEN(10)
             DCL        VAR(&USER) TYPE(*CHAR) LEN(10)

             DCL        VAR(&JOBNAME) TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBNBR) TYPE(*CHAR) LEN(6)

             RTVJOBA    JOB(&JOBNAME) USER(&USER) NBR(&JOBNBR)
             IF         (%SST(&P3 1 1) *EQ '*')  DO
                        CHGVAR     &SPLUSR &USER
                        CHGVAR     %SST(&P3  1  10) &JOBNAME
                        CHGVAR     %SST(&P3 11  10) &USER
                        CHGVAR     %SST(&P3 21   6) &JOBNBR
                 ENDDO
             ELSE                                +
                        CHGVAR     &SPLUSR %SST(&P3 11 10)

 /* USER QSECOFR, QSYSOPR UNLIMIT ACCESS SPOOLED FILE */
             IF      ((&USER *EQ 'QSECOFR') *OR +
                      (&USER *EQ 'QSYSOPR'))    +
                          THEN(GOTO OK)

 /* LIMIT ONLY SPOOLED CREATION USER CAN BROWSE OWN'S SPOOLED FILE */
             IF         COND(&USER *NE &SPLUSR) +
                          THEN(GOTO NOT_OK)

 OK:
             RETURN

 NOT_OK:     SNDPGMMSG  MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000' +
                          *CAT 'You are not authorized to spooled +
                          file' *BCAT &P2) MSGTYPE(*DIAG)

             SNDPGMMSG  MSGID( CPF0002 )                          +
                        MSGF( QSYS/QCPFMSG )                      +
                        MSGTYPE( *ESCAPE )

             ENDPGM

            



沒有留言: