星期四, 11月 02, 2023

2002-12-18 如何限制指令 WRKSPLF 的使用, 防止使用者指定參數 USER(*ALL) 察看全系統的報表 ?


如何限制指令 WRKSPLF 的使用, 防止使用者指定參數 USER(*ALL) 察看全系統的報表 ?

某些使用者只要授與 *SPLCTL 的特殊權限,那他對系統上所有報表均有最高的權限,
他可以搬移刪除檢視所有報表,當然包含重要的機密資料,如薪資資料,所以我們需
要做適當的限制,我們可以利用命令檢核程式(Validity Checking Program) 達
到控管的目的。你可以利用下述範例更改呈自己的需求。


File  : QCLSRC
Member: WRKSPLFVC
Type  : CLP
OS Version : All
Usage : CRTCLPGM PGM(your-lib/WRKSPLFVC)
        Execute the following command :

        CHGCMD CMD(QSYS/WRKSPLF) VLDCKR(your-lib/VALWRKSPLF) 

        To reset  (If you made a mistake) :

        CHGCMD CMD(QSYS/WRKSPLF) VLDCKR(*NONE) 



  /*  The user is not authorised to use parameter USER *ALL     */
  /*  (Except QSYSOPR, QSECOFR, QSRV)                           */
  /*                                                            */
  /*  EXECUTE THE FOLLOWING COMMAND :                           */
  /*                                                            */
  /*    CHGCMD CMD(QSYS/WRKSPLF) VLDCKR(MYLIB/WRKSPLFVC)        */
  /*                                                            */
  /*  TO RESET  (IF YOU MADE A MISTAKE) :                       */
  /*                                                            */
  /*   CHGCMD CMD(QSYS/WRKSPLF) VLDCKR(*NONE)                   */
  /*                                                            */


 WRKSPLFVC:  PGM        PARM(&P1 &P2 &P3 &P4)

             DCL        VAR(&P1)       TYPE(*CHAR) LEN(44)
             DCL        VAR(&P2)       TYPE(*CHAR) LEN(7)
             DCL        VAR(&P3)       TYPE(*CHAR) LEN(10)
             DCL        VAR(&P4)       TYPE(*CHAR) LEN(1)

             DCL        VAR(&USER)     TYPE(*CHAR) LEN(10)
             DCL        VAR(&USERPARM) TYPE(*CHAR) LEN(10)
             DCL        VAR(&FORMTYPE) TYPE(*CHAR) LEN(10)
             DCL        VAR(&DEVICE)   TYPE(*CHAR) LEN(10)
             DCL        VAR(&USERDATA) TYPE(*CHAR) LEN(10)
             DCL        VAR(&ASP_BIN)  TYPE(*CHAR) LEN(2)
             DCL        VAR(&ASP_DEC)  TYPE(*DEC) LEN(2 0)

             RTVJOBA    USER(&USER)

  /*  Return if the USER is authorized to use all parameter values  */

             IF         COND(&USER *EQ QSYSOPR *OR &USER *EQ QSECOFR +
                          *OR &USER *EQ QSRV) THEN(RETURN)


  /*  Parse the command parameters                                  */

             CHGVAR     VAR(&ASP_BIN)  VALUE(%SST(&P1 43 2))
             CHGVAR     VAR(&ASP_DEC)  VALUE(%BIN(&ASP_BIN 1 2))
             CHGVAR     VAR(&USERPARM) VALUE(%SST(&P1 3 10))
             CHGVAR     VAR(&FORMTYPE) VALUE(%SST(&P1 13 10))
             CHGVAR     VAR(&DEVICE)   VALUE(%SST(&P1 23 10))
             CHGVAR     VAR(&USERDATA) VALUE(%SST(&P1 33 10))


  /*   Check the value of the parameter USER                         */

             IF         COND(&USERPARM *NE *ALL) THEN(RETURN)


  /*   User is not allowed to execute  WRKSPLF with USER *ALL        */
  /*   Send a diagnostic message to the user.                        */

 NOT_OK:     SNDPGMMSG  MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
                          You are not Authorized to use parameter +
                          USER *ALL.') MSGTYPE(*DIAG)

  /*   Message CPF0002  is used in validity checking programs to     */
  /*   indicate an error condition                                   */

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

 END:        ENDPGM




沒有留言: