如何限制指令 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期四, 11月 02, 2023
2002-12-18 如何限制指令 WRKSPLF 的使用, 防止使用者指定參數 USER(*ALL) 察看全系統的報表 ?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言