はい。ビューを使用する権限を付与するだけでは不十分です。ユーザーは、基になるテーブルに対する権限も持っている必要があります。
制限付きユーザーへのアクセスを許可する1つの方法は、借用権限です。例として、次のことを前提とします。
ユーザーRESTRICTEDはどのテーブルにもアクセスできません。すべてのライブラリーがAUT(* EXCLUDE)であるか、またはユーザーRESTRICTEDがすべてのライブラリーに対する* EXCLUDE権限を持っている。USER PERMITTEDは、テーブルとライブラリにアクセス(または所有)できます。ライブラリDATAにはテーブルがあります。ライブラリPROGRAMSには、プログラムとストアドプロシージャがあります。
ライブラリーPROGRAMSにRPGストアード・プロシージャーを作成することを許可します。プログラムにUSRPRF(* OWNER)が指定されていることを確認してください。つまり、プログラムを実行すると、プログラムを実行するプロファイルの権限(RESTRICTED)ではなく、所有者の権限(PERMITTED)が使用されます。
RPGプログラムオブジェクトへのPERMITTED * USE権限をユーザーに付与します-または-SQLを介してGRANTします。また、ライブラリPROGRAMSへのRESTRICTED * USEアクセスをユーザーに許可します。これにより、RESTRICTEDがストアドプロシージャ/プログラムを実行できるようになります。
ユーザーRESTRICTEDにはDATAのテーブルにアクセスする権限がなく、そのままにしておきたいことに注意してください。
ここで、ユーザーRESTRICTEDにSQLを使用してストアドプロシージャを呼び出します。ライブラリーPROGRAMSおよびコンパイルされたプログラムオブジェクトに対する* USE権限を持っているため、彼女にはプログラムを実行する権限があります。ストアード・プロシージャーは、所有者PERMITTEDの権限で実行されます。PERMITTEDはライブラリーDATAおよびその中のテーブルへの完全なアクセス権を持っているため、ストアード・プロシージャーはそれらのテーブルにアクセス/更新できます。RESTRICTEDが使用しようとする未加工のSQLは、権限が不十分なために失敗します。彼女が実行できるのは、自分用に作成されたストアドプロシージャを呼び出すことだけです。
プログラムがデータと同じライブラリーに保管されている場合は、ライブラリーにRESTRICTED * USE権限を付与し、そのライブラリーのすべてのテーブルに対して(* EXCLUDEを介して)具体的に制限する必要があります。ストアドプロシージャのみを保持するRESTRICTEDライブラリを作成し、そのライブラリへのアクセスを許可する方が簡単な場合があります。DATAで新しく作成されたテーブルから彼女を制限し続けることを覚えておく必要がないため、これにより継続的なメンテナンスが容易になります。