5.OCFを使ったセキュリティの実際
- (4)パスワード+カンパニコード
-
パスワードについては、レベル1で説明したので、こちらでは省略します。カンパニコードについて、詳細に説明します。
まず説明しやすいように、以下の4つのオペレータを作ります。2つのカンパニコード「AA」と「BB」を持つオペレータ「AAA」と1つのカンパニコード「BB」を持つオペレータ「BBB」、そして管理者権限であるカンパニコード「なし」のオペレータ「ZZZ」です。
オペレータ カンパニ 備考 AAA AA AAA BB BBB BB ZZZ なし 管理者用 オペレータコントロールファイル保守ユーティリティで見ると以下の通り。
オペレータ「AAA」のカンパニ「AA」の情報
オペレータ「AAA」のカンパニ「BB」の情報
オペレータ「BBB」のカンパニ「BB」の情報
オペレータ「ZZZ」のカンパニ「なし」の情報(グローバルオペレータ)
- カンパニ「AA」のオペレータ「AAA」
-
まずカンパニ「AA」のオペレータ「AAA」で操作開始をします。
ハードディスク(MSD003)の中身を見てみます。
SYS@FDFとSYS@FSDFがカンパニ「なし」のファイル、
CIDのところに「AA」と書いてある、AAAAAとTESTAAがカンパニ「AA」のファイルです。
後で比較をするのでFREE SPACEのサイズを見てください。2912レコード分の空きがあります。
- カンパニ「BB」のオペレータ「BBB」
-
次にカンパニ「BB」のオペレータ「BBB」で、これらのファイルがどのように見えるかみてみましょう。
オペレータ「BBB」で操作開始します。
同じハードディスクの中身を見てみると、カンパニ「AA」のファイルが見えません。
見えないので当然書き込みなどのアクセスもできません。
カンパニ「BB」のファイルTESTBBを作ってみます。
当然、オペレータ「BBB」はファイルTESTBBを見ることができます。
ファイルTESTBBのCIDのところに「BB」と書いてあります。カンパニ「BB」を持つオペレータは、カンパニ「BB」を持つファイルを作ることができます。
ファイルを作ったので、FREE SPACEは2896に減りました。
- カンパニ「AA」のオペレータ「AAA」
-
もう一度、カンパニ「AA」のオペレータ「AAA」で、カンパニ「BB」を持つファイルが見れるかどうか確認してみましょう。
誰でも予想できるように、カンパニ「AA」のオペレータからは、カンパニ「BB」のファイルは見れません。ファイルTESTBBは見えなくても、存在しているので、FREE SPACEは2896になっています。
- カンパニ「BB」のオペレータ「AAA」
-
オペレータ「AAA」は、カンパニ「BB」も兼務していました。
カンパニ「BB」のオペレータ「AAA」で操作開始を行います。
このように同じオペレータでも、違うカンパニコードならば、改めて操作開始を行わなければなりません。
ハードディスクの中のファイルの様子を見てみます。
カンパニ「BB」で入ったので、同じカンパニ「BB」を持つオペレータ「BBB」と同じ内容を見ることができます。
これでわかるのは、カンパニ「AA」とカンパニ「BB」を持つオペレータ「AAA」であっても、「AA」のファイルと「BB」のファイルを同時に見ることはできないということです。
「AA」のファイルにアクセスするためには、「AA」のカンパニを持つ方のオペレータで入る必要があります。また「BB」のファイルにアクセスするには、改めて「BB」のカンパニを持つ方のオペレータで入る必要があります。
このオペレータ(カンパニ「BB」オペレータ「AAA」)でまたファイルを作ってみましょう。
カンパニ別に同じファイルを作ることができることを確認してみます。
TESTAAというファイルを作ります。これと同じ名前のファイルが既に同じハードディスク内にあるということを思い出してください。
ハードディスクの中は以下のようになりました。
カンパニ「BB」のファイルTESTAAができました。
- カンパニ「AA」のオペレータ「AAA」
-
それでは、このファイルがカンパニ「AA」のオペレータからはどのように見えるか確認してみます。
今、オペレータ「AAA」とオペレータ「BBB」が操作開始状態にあるので、画面接続コマンドを実行すると、どちらのオペレータのジョブに接続するかを聞いてきます。オペレータ「AAA」の場合は、カンパニ「AA」とカンパニ「BB」の2つで操作開始しているので、どちらのカンパニを持つオペレータなのかさらに聞いてきます。
カンパニ「AA」のファイルTESTAAは見ることができますが、カンパニ「BB」のファイルTESTAAは見ることができません。
このように同じファイル名でも、カンパニが違えば違うファイルにアクセスすることができます。 カンパニ「AA」を持つオペレータからTESTAAに書き込みや読み込みを行った場合は、カンパニ「AA」のTESTAAに書き込みや読み込みが行われます。カンパニ「BB」を持つオペレータからTESTAAに書き込みや読み込みを行った場合は、カンパニ「BB」のTESTAAに書き込みや読み込みが行われます。
カンパニ「AA」のオペレータがカンパニ「BB」のTESTAAに書き込みや読み込みを行うことはできません。
- カンパニ「なし」のオペレータ「ZZZ」
-
最後に管理者権限のオペレータ「ZZZ」からは、これらのファイルがどのように見えるか確認してみます。
ハードディスクの内容を見てみます。カンパニ「なし」のオペレータの場合、ファイルアクセスなどを行うときにカンパニコードを入力する必要があります。
下の画像は、カンパニ「AA」のファイルを指定しています。グローバルカンパニのファイルを見るときはカンパニのところに何も入力しません。全部のカンパニのファイルを見るときは、A−VXにおけるオールマイティの「!」を入力します。
「!」を入力して、全ファイルを見たところ。
管理者権限オペレータ「ZZZ」で、カンパニ「AA」のファイルを見たところです。
このようにカンパニ「なし」のオペレータは、どのカンパニのファイルでも見ることができます。ただし必ずカンパニを入力する必要があります。カンパニ「AA」のファイルTESTAAのデータをカンパニ「BB」のファイルTESTAAにコピーするといったことも可能です。
カンパニ「なし」のオペレータは、ファイルアクセス時に必ずどのカンパニのファイルにアクセスするか指定する必要があります。ということは、一般ユーザのファイルアクセスと管理者のファイルアクセスでは違いがあるということに気をつけなければなりません。ユーティリティは、ファイルアクセス時にカンパニコードを聞いてきます。つまりユーティリティを使用するJSの場合、ファイルアクセス時にCIDのパラメータが追加されるので、一般ユーザ用のJSと管理者用のJSで違うものを用意する必要がある可能性があります。
以下は、カンパニ「BB」のオペレータが、TESTAA(カンパニはBB)のデータをTESTBB(カンパニはBB)にコピーするためのJSです。コピーには簡易操作ユーティリティ#ABCを使用しています。
/RUN #ABC,DEV=MSD; 00010 MN1=05_MN2=01_PA1=TESTAA_O02=YES_DEV=MSD003_IFO=PROTECT_RER=ABORT_ 00020 PA2=TESTBB_O05=YES_DEV=MSD003_DEL=NO_O01=NO_ 00030 MN1=99_ 00040 /> ; 00050
同じことをするJSををカンパニ「なし」のオペレータ用に作ってみます。
/RUN #ABC,DEV=MSD; 00010 MN1=05_MN2=01_PA1=TESTAA_O02=YES_DEV=MSD003_IFO=PROTECT_CID=BB_RER=ABORT_ 00020 PA2=TESTBB_O05=YES_DEV=MSD003_CID=BB_DEL=NO_O01=NO_ 00030 MN1=99_ 00040 /> ; 00050
カンパニ「なし」用のJSはCIDというパラメータが増えています。もし、カンパニ「BB」のオペレータがカンパニ「なし」のオペレータ用のJSを実行すると、「パラメータの指定が間違っています」というエラーメッセージが表示されてしまいます。逆も同じで、カンパニ「なし」のオペレータがカンパニ「BB」用のJSを実行するとCIDのパラメータがないため、カンパニ「なし」のファイルにアクセスしようとしてしまいます。(今回の場合、カンパニ「なし」のTESTAAファイルは作成していないので、ファイルがみつからないというエラーになる。)
全部のファイルを表示してみました。最終的にこのハードディスクは以下のような状態になっています。
システム生成を「オペレータとカンパニ」にした場合、1つ重要な問題があります。オペレータコントロールファイル保守のユーティリティのセキュリティがなされていないため、どのオペレータからも実行可能であるということです。具体的には、どのオペレータも全員のパスワードを知ることができるし、変更することも可能になっています。したがって、このシステム生成ではなく、もう一工夫したレベル4の方を使用すべきです。
あくまでも一例ですが、OCFのカンパニを利用すれば、複数のオフコンを1台の大きなサーバ(オフコン)にまとめるといったこともできます。
例えば、A部門で使っていたAサーバとB部門で使っていたBサーバの2台をCサーバにまとめる場合、
Aサーバのファイルは全部カンパニ「A」の属性のファイルにして、Cサーバに入れる。
Bサーバのファイルは全部カンパニ「B」の属性のファイルにして、Cサーバに入れる。
カンパニ「A」のユーザは、カンパニ「B」のファイルは見れず、カンパニ「A」のファイルしか見れないので、今まで通りのプログラムが無改造で使用できます。
カンパニ「B」のユーザは、逆にカンパニ「B」のファイルしか見ることができないので、やはり今まで通りのプログラムが無改造で使用できます。
サーバ「A」とサーバ「B」とで同じ名前のファイルがあっても、カンパニが違えば別ファイルになるので、そのままサーバCに持っていくことができます。
サーバAとサーバBで同じデータのファイルを使っていた場合、そのファイルをグローバルファイルにすれば、2つのカンパニから見ることができる。2つのサーバ間でデータの同期を取るとかそういった苦労が無くなります。
グローバルオペレータなら、カンパニ「A」のファイルもカンパニ「B」のファイルも使えるので、カンパニを使用すれば複数台管理する必要が無くなります。
今までサーバAからサーバBにデータ転送していた場合、カンパニを使ってサーバCに統合してしまえば、グローバルオペレータならカンパニAのファイルからカンパニBのファイルへのデータコピーするだけになります。
もう1つ例を挙げます。
例えば第一営業課と第二営業課があるとします。それぞれの課員は、別の部のファイルはアクセスできないようにしたい。一方、オフコンでやる業務は同じで、各課員が日々の売上を入力して、毎日夜/毎月末売上を集計しているとします。
もしカンパニを使用しないとしたら、第一営業課用のファイル(FILE11、FILE12)、第二営業課用のファイル(FILE21、FILE22)を作る必要があります。そしてファイル名が異なるために、第一営業課用のジョブと第二営業課用のジョブを作る必要があります。ファイルは一応機密コードを使って各々ガードをかけることはできます。
カンパニを使用すると、まずそれだけで互いの部門のファイルは見ることができなくなります。
同じファイル名をカンパニ毎に作ることができるので、ジョブは第一営業課と第二営業課で共通のものを使用することができます。
もし第一営業課と第二営業課の集計結果をさらに集計してファイルに格納する必要があるのならば、両カンパニでアクセス可能なグローバルファイルFILE03を作ってそこに格納することができます。
例えば第一営業課用のジョブはDEV=MSD002、FIL=FILE11、第二営業課用のジョブはDEV=MSD002、FIL=FILE21というようにファイル名を変えなければならない。
例えばDEV=MSD002、FIL=FILE01と指定すれば、システムが自動的にカンパニを付加して、それぞれのカンパニ用のFILE01をアクセスしてくれる。