CHKSPCAUT
コマンド(Check Special Authority)は、指定されたユーザーが
ある特定の特殊権限を所有しているか、どうかを調べるコマンドである。
例えば WRKOUTQ をユーザーにも解放していて、スプールの操作も
任せるのであれば、事前にそのユーザーに *SPLCTL
権限があるかどうかを
検査しておく必要がある。
また機密保護に関する操作を行なわせるには *SECADM
権限のある
ユーザーにのみ許可する必要がある。
CHKSPCAUT コマンドを使えば、事前にユーザーの特殊権限を複数個、
同時に調べることができる。
例えば、次のような使い方である。
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* TESTAUTCL : ユーザー特殊権限の検査 */ 0004.00 /* */ 0005.00 /* CMD: CHKSPCAUT を使ってユーザーの特殊権限を */ 0006.00 /* 調査する。 */ 0007.00 /*---------------------------------------------------------*/ 0008.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) 0009.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0010.00 0011.00 RTVJOBA USER(&USER) 0012.00 CHKSPCAUT USER(&USER) AUT(*SPLCTL) 0013.00 MONMSG MSGID(CPF9800) EXEC(GOTO CMDLBL(ERROR)) 0014.00 0015.00 WRKOUTQ 0016.00 RETURN 0017.00 0018.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) 0019.00 SNDMSG: SNDPGMMSG MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) 0020.00 ENDPGM
また次のように直接、コマンド : CHKSPCAUT
を使って特殊権限を調べることもできる。
0001.00 CMD PROMPT(' 特殊権限の検査 ') 0002.00 PARM KWD(USER) TYPE(*CHAR) LEN(10) DFT(*CURRENT) + 0003.00 PROMPT(' ユーザー・プロフィール ') 0004.00 PARM KWD(AUT) TYPE(*CHAR) LEN(10) RSTD(*YES) + 0005.00 VALUES(*ALLOBJ *AUDIT *IOSYSCFG *JOBCTL + 0006.00 *SAVSYS *SECADM *SERVISE *SPLCTL) MAX(8) + 0007.00 PROMPT(' 特殊権限 ')
CRTCMD CMD(MYLIB/CHKSPCAUT) PGM(MYLIB/CHKSPCAUTC) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
0001.00 PGM PARM(&USER &AUTC) 0002.00 /*---------------------------------------------------------*/ 0003.00 /* CHKSPCAUT : 特殊権限の検査 */ 0004.00 /* */ 0005.00 /* API: QSYCUSRS を使ってユーザーの特殊権限を */ 0006.00 /* 調査する。 */ 0007.00 /*---------------------------------------------------------*/ 0008.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) 0009.00 DCL VAR(&AUTC) TYPE(*CHAR) LEN(82) 0010.00 DCL VAR(&AUT) TYPE(*CHAR) LEN(80) 0011.00 DCL VAR(&AUTSU) TYPE(*CHAR) LEN(4) 0012.00 DCL VAR(&LEN) TYPE(*DEC) LEN(8 0) 0013.00 DCL VAR(&NULL2) TYPE(*CHAR) LEN(2) VALUE(X'0000') 0014.00 DCL VAR(&SPEC) TYPE(*CHAR) LEN(1) 0015.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0016.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0017.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0018.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0019.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0020.00 DCL VAR(&LVL) TYPE(*CHAR) LEN(4) VALUE(X'00000001') 0021.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0022.00 VALUE(X'00000000') /* 2 進数 */ 0023.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0024.00 0025.00 CHGVAR VAR(&AUTSU) VALUE(&NULL2 *CAT %SST(&AUTC 1 2)) 0026.00 CHGVAR VAR(&LEN) VALUE(%BIN(&AUTSU) * 10) 0027.00 CHGVAR VAR(&AUT) VALUE(%SST(&AUTC 3 &LEN)) 0028.00 CALL PGM(QSYS/QSYCUSRS) PARM(&SPEC &USER &AUT + 0029.00 &AUTSU &LVL &APIERR) 0030.00 IF COND(&SPEC *EQ 'N') THEN(DO) 0031.00 CHGVAR VAR(&MSG) VALUE(' ユーザー ' *CAT &USER + 0032.00 *TCAT ' は権限 ' *CAT &AUT *TCAT + 0033.00 ' を所有していない。 ') 0034.00 GOTO SNDMSG 0035.00 ENDDO 0036.00 RETURN 0037.00 0038.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0039.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0040.00 MSGFLIB(&MSGFLIB) 0041.00 SNDMSG: 0042.00 IF COND(&MSGID *EQ ' ') THEN(DO) 0043.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0044.00 TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE) 0045.00 ENDDO 0046.00 ELSE CMD(DO) 0047.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0048.00 MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) + 0049.00 MSGTYPE(*ESCAPE) 0050.00 ENDDO 0051.00 ENDPGM
CRTCLPGM PGM(MYLIB/CHKSPCAUTC) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
API: QSYCUSRS
の詳細に関しては「80. API: QSYCUSRS ユーザー特殊権限の検査」などを
参照のこと。