Tools

39. ユーザーの特殊権限を調べる CHKSPCAUT

CHKSPCAUT コマンド(Check Special Authority)は、指定されたユーザーが
ある特定の特殊権限を所有しているか、どうかを調べるコマンドである。
例えば WRKOUTQ をユーザーにも解放していて、スプールの操作も
任せるのであれば、事前にそのユーザーに *SPLCTL 権限があるかどうかを
検査しておく必要がある。
また機密保護に関する操作を行なわせるには *SECADM 権限のある
ユーザーにのみ許可する必要がある。
CHKSPCAUT コマンドを使えば、事前にユーザーの特殊権限を複数個、
同時に調べることができる。

例えば、次のような使い方である。

【TESTAUTCL : CHKSPCAUT コマンドによって特殊権限を調べる CLP サンプル】
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 を使って特殊権限を調べることもできる。

【コマンド: 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)
【CLP: CHKSPCAUTC】
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 ユーザー特殊権限の検査」などを 参照のこと。