権限 ID と権限名

許可 ID とは、データベース・マネージャーとアプリケーション・プロセスとの間、 またはデータベース・マネージャーとプログラム準備処理との間の接続が確立されるときに、 データベース・マネージャーが獲得する文字ストリングのことです。 権限 ID は、特権の集合を示します。権限 ID がユーザーまたはユーザーのグループを示すこともありますが、データベース・マネージャーでは、権限 ID のこの特性は管理しません。

接続が確立された後で、SET SESSION AUTHORIZATION ステートメントを使用して権限 ID を変更することができます。

権限 ID は、データベース・マネージャーで SQL ステートメントの権限検査に使用されます。

ステートメントの権限 ID がプログラムまたはサービス・プログラム の所有者である場合、これは借用権限と呼ばれます。この権限 ID は、実行時の権限 ID に加えて、 プログラム所有者の権限を借用し、使用します。

ステートメント権限 ID としてプログラムの所有者を使用 するプログラムまたはサービス・プログラムのネストされた呼び出しが起こる場合、 複数レベルの借用権限が可能です。借用権限はスレッド・レベルで トラッキングされます。CURRENT USER 特殊レジスターを使用して、 最新の借用権限の権限 ID を戻すことができます。ステートメント権限要件の適用では、すべてのレベルの借用権限 が考慮されます。DYNUSRPRF 値を *USER に設定して動的 SQL ステートメントが 実行されるときには、すべてのレベルの借用権限が抑止されます。

権限 ID は、すべての SQL ステートメントに適用されます。静的 SQL ステートメントの許可検査に使用される権限 ID は、プリコンパイラーのコマンドで指定された USRPRF の値によって、以下のように異なります。

  • USRPRF(*OWNER) が指定される場合、または USRPRF(*NAMING) が指定され、SQL 命名モードが使用される場合は、ステートメントの権限 ID は、非分散 SQL プログラムの所有者です。分散 SQL プログラムの場合は、SQL パッケージの所有者です。
  • USRPRF(*USER) が指定される場合、または USRPRF(*NAMING) が指定され、システム命名モードが使用される場合は、ステートメントの権限 ID は、非分散 SQL プログラムを実行するユーザーの権限 ID です。分散 SQL プログラムの場合は、現行サーバーのユーザーの権限 ID です。

動的 SQL ステートメントの許可検査に使用される権限 ID も、そのステートメントの実行される場所と方法によって次のように異なります。

  • 非分散プログラムで準備され実行されるステートメントの場合
    • そのプログラムの USRPRF の値が *USER で、DYNUSRPRF の値が *USER である場合は、適用される権限 ID は、その非分散プログラムを実行するユーザーの権限 ID。これは、実行時権限 ID と呼ばれる。
    • そのプログラムの USRPRF の値が *OWNER で、DYNUSRPRF の値が *USER である場合は、適用される権限 ID は、その非分散プログラムを実行するユーザーの権限 ID。
    • そのプログラムの USRPRF の値が *OWNER で、DYNUSRPRF の値が *OWNER である場合は、適用される権限 ID は、その非分散プログラムの所有者の権限 ID。
  • 分散プログラムで準備および実行されるステートメントの場合
    • その SQL パッケージの USRPRF の値が *USER で、DYNUSRPRF の値が *USER である場合は、適用される権限 ID は、現行サーバーでその SQL パッケージを実行するユーザーの権限 ID。この権限 ID も、実行時権限 ID と呼ばれる。
    • その SQL パッケージの USRPRF の値が *OWNER で、DYNUSRPRF の値が *USER である場合は、適用される権限 ID は、現行サーバーでその SQL パッケージを実行するユーザーの権限 ID。
    • その SQL パッケージの USRPRF の値が *OWNER で、DYNUSRPRF の値が *OWNER である場合は、適用される権限 ID は、現行サーバーのその SQL パッケージの所有者の権限 ID。
  • 対話式で出されるステートメントの場合、SQL 開始 (STRSQL) コマンドを出したユーザーの ID が、適用される権限 ID になります。
  • RUNSQLSTM コマンドにより実行されるステートメントの場合、RUNSQLSTM コマンドを出したユーザーの ID が、適用される権限 ID になります。
  • ステートメントが REXX から実行される場合、適用される権限 ID は、STRREXPRC コマンドを出したユーザーの ID です。

IBM® i オペレーティング・システムでは、実行時権限 ID はスレッドのユーザー・プロファイルです。

SQL ステートメントで指定される 権限名 とステートメントの権限 ID を混同してはなりません。権限名は、GRANT や REVOKE ステートメントで使用される ID で、認可や取り消しの対象を指します。X に特権を付与する前提は、 X がそれらの特権を必要とするステートメントの権限 ID であることです。 SQL ステートメントに関する権限を検査するときには、グループ・ユーザー・プロファイルが使用されることもあります。 グループ・ユーザー・プロファイルについては、「機密保護解説書」を参照してください。

SMITH というユーザー ID を持つユーザーがいるとします。このユーザーが次のようなステートメントを対話式で実行する場合は、SMITH が権限 ID となります。

   GRANT SELECT ON TDEPT TO KEENE

SMITH は、このステートメントの権限 ID です。したがって、このステートメントを実行する権限が SMITH にあるかどうかが検査されます。

KEENE は、ステートメントに指定されている権限名です。KEENE には、SMITH.TDEPT に対する SELECT 特権が与えられます。