如何限制指令 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期四, 11月 02, 2023
2003-01-03 如何限制指令 DSPSPLF 的使用, 防止使用者於 WRKSPLF 畫面中刪除全系統的報表 ?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言