CL

80. API: QSYCUSRS ユーザー特殊権限の検査

特殊権限を持っている特別なユーザーにだけ実行を許可したいジョブを

構成するには、ユーザーに与えられている特殊権限を検査する必要がある。

ここでは API: QSYCUSRS を使ってユーザーの特殊権限を検査する方法を

紹介する。

ユーザー特殊権限の検査 ( QSYCUSRS )

パラメータ

必須パラメータ・グループ:

1.権限標識出力Char(1)
2.ユーザー・プロフィール名入力Char(10)
3.特殊権限入力Char(*)
4.権限の数入力Binary(4)
5.呼び出しレベル入力Binary(4)
6.エラー・コード入出力Char(*)

QSYCUSRSはユーザーが指定された特殊権限を持っているかどうかを検査します。

権限標識

Y・・・・・・ユーザーは、指定された特殊権限を所有している。
N・・・・・・ユーザーは、指定された特殊権限を所有していない。

ユーザー・プロフィール名

特殊値 *CURRENT・・・・・・現在、実行中のユーザー

特殊権限

検査する特殊権限を一個または、複数個(最大8個まで)指定することができます。
それぞれ 10 文字のフィールドの配列として指定します。

*ALLOBJ・・・・・・すべてのオブジェクト特殊権限
*AUDIT・・・・・・監査特殊権限
*IOSYSCFG・・・・・・入出力システム構成の特殊権限
*JOBCTL・・・・・・ジョブ制御特殊権限
*SAVSYS・・・・・・システム保管特殊権限
*SECADM・・・・・・機密保護管理者特殊権限
*SERVICE・・・・・・保守特殊権限
*SPLCTL・・・・・・スプール制御特殊権限

権限の数

特殊権限パラメータで指定されている権限の数。

呼び出しレベル

通常は 1 を指定する

【 TESTAUT: *SECADM を検査するCLPサンプル・ソース 】
0001.00              PGM                                                              
0002.00 /*---------------------------------------------------------*/                 
0003.00 /*   TESTAUT  :   ユーザー特殊権限の検査                   */                 
0004.00 /*                                                         */                 
0005.00 /*       API: QSYCUSRS を使ってユーザーの特殊権限を        */                 
0006.00 /*            調査する。                                   */                 
0007.00 /*---------------------------------------------------------*/                 
0008.00              DCL        VAR(&USER) TYPE(*CHAR) LEN(10)                        
0009.00              DCL        VAR(&TOKSHU) TYPE(*CHAR) LEN(1)                       
0010.00              DCL        VAR(&AUTSU) TYPE(*CHAR) LEN(4) +                      
0011.00                           VALUE(X'00000001')                                  
0012.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                         
0013.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(4) +                     
0014.00                           VALUE(X'00000000') /* 2 進数  */                    
0015.00              DCL        VAR(&LVL) TYPE(*CHAR) LEN(4) VALUE(X'00000001')       
0016.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))               
0017.00                                                                               
0018.00              RTVJOBA    USER(&USER)                                           
0019.00              CALL       PGM(QSYS/QSYCUSRS) PARM(&TOKSHU &USER +               
0020.00                           '*SECADM   ' &AUTSU &LVL &APIERR)                   
0021.00              IF         COND(&TOKSHU *EQ 'N') THEN(DO)                        
0022.00              CHGVAR     VAR(&MSG) VALUE(' ユーザー ' *CAT &USER +             
0023.00                           *TCAT ' には *SECADM 権限がありません。 ')          
0024.00              GOTO       SNDMSG                             
0025.00              ENDDO                                         
0026.00              RETURN                                        
0027.00                                                            
0028.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)  
0029.00  SNDMSG:     SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)           
0030.00              ENDPGM
【コンパイル】
CRTCLPGM PGM(MYLIB/TESTAUT) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
【解説】

API: QSYCUSRS を使って現在のユーザーが *SECADM 権限を持っているかどうかを
検査します。
*SECADM 権限がないときだけには「ユーザー xxxx には *SECADM 権限がありません。
というエラー・メッセージが戻されます。