如何讓系統操作人員將使用者設定為可以進入系統?(Command EBLUSRPRF Enabled User Profile)
當使用者的 SignOn 錯誤次數超過系統值 QMAXSIGN 的設定值時,若另一系統值
QMAXSGNACN設為 2 或 3 時,此時系統會將使用者狀態設為失效(disabled)。所已有需要讓系統操
作人員能將該失效使用者重新設定為有效,該使用者才可以進入系統。
但在開發此工具時,需要注意不得讓系統操作人員將具有 *ALLOBJ, *SECADM, *SERVICE
高級權限的人員,執行啟用(enabled)使用者的動作。
此程式需以 QSECOFR 使用者產生,並指定繼承程式擁有者的權限,系統操作人員執行此
程式時,才能間接取得 QSECOFR 的權限,更改使用者狀態,同時亦排除更改具有高級權
限的使用者。
這裡也提供 Command EBLUSRPRF 使系統操作人員便於使用。
File : QCLSRC
Member: EBLUSRPRF
Type : CLP
Usage : 此程式需以 QSECOFR 使用者產生
CRTCLPGM EBLUSRPRF USRPRF(*OWNER)
/* Program : EBLUSRPRF */
/* Version : 1.00 */
/* System : iSeries */
/* */
/* Compile the program with user QSECOFR */
/* and adopt authority : */
/* CHGPGM PGM(EBLUSRPRF) USRPRF(*OWNER) */
RSETUSRPRF: PGM PARM(&USRPRF &PASSWORD &PWDEXP &STATUS)
DCL VAR(&USRPRF) TYPE(*CHAR) LEN(10)
DCL VAR(&PASSWORD) TYPE(*CHAR) LEN(10)
DCL VAR(&PWDEXP) TYPE(*CHAR) LEN(10)
DCL VAR(&STATUS) TYPE(*CHAR) LEN(10)
DCL VAR(&CURUSER) TYPE(*CHAR) LEN(10)
DCL VAR(&GRPPRF) TYPE(*CHAR) LEN(10)
DCL VAR(&SPCAUT) TYPE(*CHAR) LEN(100)
DCL VAR(&ALLOBJ) TYPE(*LGL)
/* Parameters for QCLSCAN */
DCL VAR(&STRINGLEN) TYPE(*DEC) LEN(3 0) VALUE(100)
DCL VAR(&STRPOS) TYPE(*DEC) LEN(3 0) VALUE(1)
DCL VAR(&PATTERN) TYPE(*CHAR) LEN(10)
DCL VAR(&PATTERNLEN) TYPE(*DEC) LEN(3 0) VALUE(10)
DCL VAR(&TRANSLATE) TYPE(*CHAR) LEN(1) VALUE('1')
DCL VAR(&TRIM) TYPE(*CHAR) LEN(1) VALUE('1')
DCL VAR(&WILD) TYPE(*CHAR) LEN(1) VALUE(' ')
DCL VAR(&RESULT) TYPE(*DEC) LEN(3 0)
/* Check userprofile existence */
CHKOBJ OBJ(QSYS/&USRPRF) OBJTYPE(*USRPRF)
MONMSG MSGID(CPF0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('***** +
Error ****** invalid userprofile') +
TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
ENDDO
/* new password same as userprofile */
IF COND(&PASSWORD *EQ *USRPRF) THEN(CHGVAR +
VAR(&PASSWORD) VALUE(&USRPRF))
/* retrieve current user */
RTVJOBA USER(&CURUSER)
/* Retrieve userprofile attributes */
RTVUSRPRF USRPRF(&USRPRF) SPCAUT(&SPCAUT) GRPPRF(&GRPPRF)
/* Check if the userprofile to be changed has */
/* *ALLOBJ authority. */
CHGVAR VAR(&PATTERN) VALUE('*ALLOBJ')
CALL PGM(QCLSCAN) PARM(&SPCAUT &STRINGLEN &STRPOS +
&PATTERN &PATTERNLEN &TRANSLATE &TRIM +
&WILD &RESULT)
/* String *ALLOBJ was found */
IF COND(&RESULT *NE 0) THEN(CHGVAR VAR(&ALLOBJ) +
VALUE('1'))
/* Do not allow to let userprofile QSECOFR, QSRV or */
/* any userprofile with *ALLOBJ authority or group */
/* profile QSECOFR to be changed. */
/* */
IF COND(&USRPRF = QSECOFR *OR &USRPRF = QSRV +
*OR &ALLOBJ *OR &GRPPRF *EQ QSECOFR) THEN(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('*** +
Error *** not authorised to change this +
user profile') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
ENDDO
/* Before resetting the userprofile, let the current */
/* user authenticate by typing his own password. */
/* This prevents changing a userprofile on a terminal */
/* where the normal user went for dinner. */
?CHKPWD
MONMSG MSGID(CPF0000) EXEC(RETURN)
/* Change userprofile */
CHGUSRPRF USRPRF(&USRPRF) PASSWORD(&PASSWORD) +
PWDEXP(&PWDEXP) STATUS(&STATUS)
MONMSG MSGID(CPF0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('*** +
Error occurred *** see joblog') +
TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
ENDDO
/* Log the changes into the History log */
SNDPGMMSG MSG('Userprofile ' *CAT &USRPRF *TCAT ' +
reset by user ' *CAT &CURUSER) TOMSGQ(QHST)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Userprofile ' *CAT &USRPRF *BCAT +
'reset') TOPGMQ(*PRV) MSGTYPE(*COMP)
END: ENDPGM
File : QCMDSRC
Member: RSETUSRPRF
Type : CMD
Usage : CRTCMD CMD(your-lib/EBLUSRPRF) PGM(your-lib/EBLUSRPRF)
/* Command : EBLUSRPRF */
/* Version : 1.00 */
/* System : iSeries */
/* Description : Enable userprofile and password */
RSETUSRPRF: CMD PROMPT('Enable userprofile and password')
PARM KWD(USRPRF) TYPE(*NAME) LEN(10) MIN(1) +
PROMPT('User profile')
PARM KWD(PASSWORD) TYPE(*CHAR) LEN(10) +
DFT(*USRPRF) SPCVAL((*USRPRF) (*SAME)) +
DSPINPUT(*PROMPT) PROMPT('User password')
PARM KWD(PWDEXP) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*YES) VALUES(*SAME *NO *YES) +
PROMPT('Set password to expired')
PARM KWD(STATUS) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*ENABLED) VALUES(*ENABLED *DISABLED +
*SAME) PROMPT('Status')
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2003-03-25 如何讓系統操作人員將使用者設定為可以進入系統?(Command EBLUSRPRF Enabled User Profile)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言