技術解説とヒント
<<今月の目次>>
●HSSF 文書でのタイム・スタンプの使用
●ファイルを参照しているユーザーの判別
●接続した Telnet クライアントの IP アドレスの取得
●システム要求:V5R4 での現行ユーザーの変更


HSSF 文書でのタイム・スタンプの使用

Q:
HSSF を使用して Excel スプレッドシートを作成しました。すべてうまくいっているのですが、タイム・スタンプを挿入する必要があります。どうすれば挿入できますか?

A:

Excel では、日付、時刻、およびタイム・スタンプは数値として保管されます。この数値は、1900 年 1 月 1 日からの日数を表しています。1 日の小数部を使用して、時刻を表現できます。例えば、1.5 は 1900 年 1 月 1 日の正午を表します。これは、この数値が 1 日目から半日経った時刻を示しており、1 日目は 1900 年 1 月 1 日であるからです。

実際に試してみましょう。Excel を開いて、セルに数値 38,736 を入力します。次に、そのセルを右クリックし、「セルの書式設定」オプションを使用して書式を日付に変更します。すると、数値が 2006 年 1 月 19 日と表示されます。小数部を指定して同じ手順を繰り返すと、その小数部が時刻を表します (必ず、時刻を含む数値形式を使用してください)。例えば、38,736.75 は 2006 年 1 月 19 日 18:00 と表示されます。
日付を算出する際には、次の 2 つのことに注意する必要があります。

  ・ 1900 年 1 月 1 日が 1 日目です。
  ・ Excel は 1900 年を誤ってうるう年と認識しています。
    一方、RPG に誤りはありません。1900 年 2 月 28 日より後の
    RPG 日付を Excel 日付に変換する際には、このことを考慮して
    1 日を余分に加算する必要があります。

これらの点を考慮して、図 1 のルーチンは RPG スタイルの日付を Excel スタイルの日付に変換しています。同様に、図 2 のルーチンは、RPG 時刻フィールドを Excel で使用する必要がある数値の小数部に変換します。RPG タイム・スタンプ・フィールドを Excel タイム・スタンプに変換するには、図 3 の例に示すように、これらのルーチンを両方とも呼び出し、結果を合計する必要があります。

正しい数値が得られたら、HSSF を使用して、日付、時刻、またはタイム・スタンプのフィールドとして表示されるように数値の書式を適用します。このためには、数値の書式を正しく設定するセル・スタイルのオブジェクトを作成します (図 4)。それぞれのワークブックごとに 1 回だけこのセル・スタイルを作成しておけば、後でスプレッドシートにセルを追加するときに、必要な数のセルにこのスタイルを適用できます。

myNumber = hssf_ts2xls(myTimestamp);
hssf_num(row:col:myNumber:timestamp);
 


↑このページのトップへ


ファイルを参照しているユーザーの判別

Q:
特定のユーザーが機密データや重要データにアクセスしている疑いがある場合は、どうすればよいでしょうか?

A:

特定のユーザーによる不正なデータ・アクセスをモニターするには、ユーザーがオブジェクトにアクセスするたびにシステム監査ジャーナル QAUDJRN に監査レコードを送信するように、監査機能を構成できます。図 5 の例では、QAUDJRN を作成し、パラメーターに適切な値を設定する方法を示しています。

ジャーナルを作成した後、次のようにユーザー監査の変更 (CHGUSRAUD) コマンドを発行して、監査対象のユーザーを指定し、*ALL (オブジェクトへのアクセスをすべて記録) または *CHANGE (オブジェクトへの変更のみを記録) を OBJAUD パラメーター値に指定します。

CHGUSRAUD USRPRF(MYUSER) OBJAUD(*ALL)

ユーザーの監査値を設定した後、機密ファイルの監査値も設定する必要があります。このためには、オブジェクト監査の変更 (CHGOBJAUD) コマンドを使用して、監査対象のオブジェクトを指定し、OBJAUD パラメーターに値 *USRPRF を指定します。

CHGOBJAUD OBJ(PAYLIB/PAYROLL)
OBJTYPE(*FILE) OBJAUD(*USRPRF)


このコマンドの組み合わせは、CHGUSRAUD コマンドに指定した個人が CHGOBJAUD コマンドに指定したオブジェクトにアクセスするときに、監査項目をジャーナル QAUDJRN に送信するようにシステムに指示します。基本的に、オブジェクトへのアクセスを監査するには、オブジェクトの監査値を *NONE 以外の値に設定する必要があります。監査値が *NONE ならば、CHGUSRAUD を使用してユーザー監査をオンにし、ユーザーを監査した場合であっても、アクセスは監査されません。

ユーザー・アクティビティーを監査するためには、その前にシステム値 QAUDCTL (図 5) に値 *AUDLVL または *OBJAUD (あるいはその両方) を指定する必要があります。QAUDCTL を設定した後、CHGUSRAUD コマンドを使用して、ジャーナル QAUDJRN に記録するユーザー・アクションを指定します。このコマンドの OBJAUD パラメーターは、オブジェクトへのアクセスの監査のみを操作します。AUDLVL パラメーターを使用すると、このユーザーを対象に、監査するアクティビティーを指定できます。

ユーザーのアクションの追跡に役立つように、CHGUSRAUD コマンドを使用して、そのユーザーによって実行されるすべての CL コマンドを監査するように指定します。ユーザーの AUDLVL 値の 1 つとして *CMD を指定すると、そのユーザーによって実行されるすべての CL コマンドが監査されます。CL プログラム内で *LOG(*NO) および ALWRTVCLSRC(*NO) として作成されたコマンドの場合は、コマンド・ストリング全体ではなくコマンド名がログに記録されます。図 6 は、CHGUSRAUD コマンドのフォーマットを示しています。


↑このページのトップへ


接続した Telnet クライアントの IP アドレスの取得


Q:

Telnet で接続しているユーザーの IP アドレスを取得するには、どうすればよいですか?例えば、ネットワークのユーザーがデスクトップ PC から iSeries Access を使用して System i にサインオンしている場合に、その PC の IP アドレスを取得することはできますか?

A:
はい、装置記述取得 (QDCRDEVD) API を使用して、特定のディスプレイ装置が接続している先のコンピューターの IP アドレスを取得できます。(QDCRDEVD API の資料は、
i5 Information Center http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?t
opic=/apis/QDCRDEVD.htm
にあります)

「Format name」パラメーターは DEVD0600 に設定する必要があります。これは、このフォーマットにディスプレイ装置に関する情報が含まれているからです。「Device name」パラメーターは、IP アドレスを取得する対象の装置の名前に設定します。

現行対話式ジョブの場合は、RTVJOBA コマンドを使用して装置名を取得できます。例えば、SNDUSRMSG を使用して 5250 クライアント (つまり、iSeries Access を使用して接続されている PC) のアドレスを表示し、さらに System i 自体のアドレスを表示する CL プログラムを作成したい場合は、図 7 のコードを使用できます。

パラメーター *CURRENT を指定してそのプログラムを呼び出すと、現行対話式セッションが検索されます。それ以外の値を指定すると、パラメーターはアドレスを取得する対象の装置名と見なされます。例えば、現行対話式プログラムの IP アドレスを検索するには、次のように入力します。

CALL PGM(GETIP) PARM('*CURRENT')

DSP01 セッションの IP アドレスを調べたい場合は、代わりに次のように入力できます。

CALL PGM(GETIP) PARM('DSP01')

プログラム内でこれらの IP アドレスを使用したい場合は、簡単な変更によってアドレスをパラメーターとして返すことができます。



↑このページのトップへ


システム要求:V5R4 での現行ユーザーの変更


IBM 提供のユーザー・プロファイル・スワップ API (QSYGETPH および QWTSETP) を使用して、アクティブ・ジョブの現行ユーザー・プロファイルを切り替えることができます。例えば、JOE が最初にサインオンしている場合に、これらのスワップ API を使用して、ジョブを現行ユーザー QSECOFR のもとで実行するように切り替えることができます。すべての権限検査が、現行ユーザー QSECOFR に基づいて行われますが、システムはジョブ初期化ユーザー JOE を引き続き追跡します。

V5R4 より前のリリースでは、ジョブ初期化ユーザーではなく、SysReq 関数の呼び出し時に有効だったユーザー・プロファイルが現行ユーザーでした。したがって、前述の例では QSECOFR プロファイルが現行ユーザーであり、SysReq 関数は QSECOFR プロファイルの権限のもとで実行されます。

一方、V5R4 では、ジョブ初期化ユーザー JOE が SysReq 処理に使用されます。V5R4 にアップグレードしたときは、特殊データ域を作成することによって、V5R4 より前の SysReq の動作が引き続き得られます。使用するコマンドは、次のとおりです。

CRTDTAARA DTAARA(QSYS/QWTSRQSSEC)  +
TYPE(*CHAR)  +
LEN(12)  +
VALUE(*NOCHGCURUSR)



↑このページのトップへ

TOPPAGE

BELLDATA, Inc. Copyright reserved.