星期四, 11月 02, 2023

2003-01-03 如何限制指令 DSPSPLF 的使用, 防止使用者於 WRKSPLF 畫面中刪除全系統的報表 ?


如何限制指令 DSPSPLF 的使用, 防止使用者於 WRKSPLF 畫面中刪除全系統的報表 ?

使用者若有 *SPLCTL 特殊權限,於 WRKSPLF 指令可以指定其他使用者或全部使用者報表,
畫面中可以使用 選項 5 瀏覽全系統的報表,那要如何限制選項 5 瀏覽報表指令 DSPSPLF 
的使用, 以保護機密資訊,不被未授權的人存取 ?

若要做到報表的安全防護,最佳的方式只有透過命令語法檢核程式(VCP - Validity Checking Program),但這個命令語法檢核程式
有時需要隨 OS 版本升級而更改,因為某些命令會增加參數,如 DSPSPLF 命令,於 
OS V5R2 時多了二個參數,所以需要更改才可以繼續使用,針對每個 Command 的所有參數
(含隱藏的常數),IBM 並未記錄於其手冊中,是需要透過系統擷取命令定義的 API 或利用工具 RTVCMD 
 http://www.iseriesnetwork.com/code/sharewarefiles/rtvcmd.zip

取得命令真正的定義(Command Source),


相關報表的命令有
WRKSPLF
CHGSPLFA
DLTSPLF
DSPSPLF
上述指令可以設定命令語法檢核程式加以檢核哪些使用者可以存取其他人的報表,
我已於前一期電子報中介紹 "如何限制指令 WRKSPLF  的使用,  防止使用者察看全系統的報表 ?" 
的VCP 命令語法檢核程式,因 WRKSPLF 參數數目 V5R1與 V5R2 相同,所以該程式不必修改即可用於 V5R2 中。

本期我再介紹 DSPSPLF 的 VCP 命令語法檢核程式 for OS V5R1 及 V5R2 :

DSPSPLF VCP 命令語法檢核程式 for V5R1

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


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

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

             DCL        VAR(&P1) TYPE(*CHAR) LEN(10)
             DCL        VAR(&P2) TYPE(*CHAR) LEN(26)
             DCL        VAR(&P3) TYPE(*CHAR) LEN(4)
             DCL        VAR(&P4) TYPE(*CHAR) LEN(1)
             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(&P2 1 1) *EQ '*')  DO
                        CHGVAR     &SPLUSR &USER
                        CHGVAR     %SST(&P2  1  10) &JOBNAME
                        CHGVAR     %SST(&P2 11  10) &USER
                        CHGVAR     %SST(&P2 21   6) &JOBNBR
                 ENDDO
             ELSE                                +
                        CHGVAR     &SPLUSR %SST(&P2 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 &P1) MSGTYPE(*DIAG)

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

             ENDPGM

            

	
DSPSPLF VCP 命令語法檢核程式 for V5R2

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


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

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

             DCL        VAR(&P1) TYPE(*CHAR) LEN(10)  /* FILE    */
             DCL        VAR(&P2) TYPE(*CHAR) LEN(26)  /* FULLJOB */
             DCL        VAR(&P3) TYPE(*CHAR) LEN(4)   /* SPLNBR  */
             DCL        VAR(&P4) TYPE(*CHAR) LEN(8)   /* SYSNAME */
             DCL        VAR(&P5) TYPE(*CHAR) LEN(6)   /* CRTDATE */
             DCL        VAR(&P6) TYPE(*CHAR) LEN(1)   /* FOLD    */
             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(&P2 1 1) *EQ '*')  DO
                        CHGVAR     &SPLUSR &USER
                        CHGVAR     %SST(&P2  1  10) &JOBNAME
                        CHGVAR     %SST(&P2 11  10) &USER
                        CHGVAR     %SST(&P2 21   6) &JOBNBR
                 ENDDO
             ELSE                                +
                        CHGVAR     &SPLUSR %SST(&P2 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 &P1) MSGTYPE(*DIAG)

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

             ENDPGM

            



沒有留言: