報表安全列三:如何限制指令 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2003-01-04 報表安全列三:如何限制指令 DLTSPLF 的使用, 防止使用者刪除其他人的報表 ?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言