CREATE PERMISSION ステートメント

CREATE PERMISSION ステートメントは、現行サーバーで行権限を作成します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。これは、DYNAMICRULES 実行動作が暗黙的または明示的に指定された場合のみ、動的に準備できる実行可能ステートメントです。

許可

このステートメントの許可 ID が持つ特権には、SECADM 権限が含まれている必要があります。 SECADM 権限では、任意のスキーマに行権限を作成できます。 権限定義内でその他のオブジェクトを参照するために必要なその他の特権はありません。 例えば、表からデータを取り出すための SELECT 特権や、ユーザー定義関数を呼び出すための EXECUTE 特権は必要ありません。

構文

構文図を読む構文図をスキップするCREATEOR REPLACE PERMISSIONpermission-nameONtable-name AScorrelation-nameFOR ROWS WHEREsearch-conditionENFORCED FOR ALL ACCESSDISABLEENABLE

説明

OR REPLACE
行権限の定義が現行サーバー上に存在している場合に、その定義を置換するために指定します。 既存の定義は、新しい定義がカタログ内で置換される前に、効率的にドロップされます。
permission-name
行権限の名前を指定します。名前 (暗黙修飾子または明示修飾子を含む) は、現行サーバーに既に存在する行権限または列マスクを指定するものであってはなりません (SQLSTATE 42710)。
table-name
行権限を作成する対象の表を指定します。名前は、現行サーバーに存在する表を識別するものでなければなりません (SQLSTATE 42704)。ニックネーム、作成済み一時表、宣言済み一時表、ビュー、シノニム、型付き表、別名を指定することはできません (SQLSTATE 42809)。 Db2® バージョン 10.5 フィックスパック 5 より前のリリースでは、table-name でカタログ表を指定することはできません (SQLSTATE 42832)。
correlation-name
表を指定するために case-expression 内で使用できる相関名を指定します。
FOR ROWS WHERE
行権限が作成されることを示します。行権限は、表の行にアクセスできる検索条件を指定します。
search-condition
表の行について真または偽となる条件を指定します。これは、副選択照会の WHERE 文節内の検索条件に使用されるのと同じ規則に従います。 また、検索条件では以下のオブジェクトまたはエレメントのいずれも参照してはなりません (SQLSTATE 428HB)。
  • 作成済みグローバル一時表、または宣言済みグローバル一時表。
  • シャドー表。
  • ニックネーム。
  • 表関数。
  • メソッド。
  • パラメーター・マーカー (SQLSTATE 42601)。
  • 非セキュアとして定義されているユーザー定義関数。
  • 非決定論的であるか、あるいは外部アクションを伴う、関数または式 (行変更式、シーケンス式など)。
  • XMLQUERY スカラー関数。
  • XMLEXISTS 述部。
  • OLAP 指定。
  • SELECT 文節内の * または name.*
  • 疑似列。
  • SELECT 節を指定しない集約関数。
  • 前記のいずれかの制限が定義に含まれるビュー。
行アクセス制御または列アクセス制御が現在アクティブになっている表を search-condition で参照している場合、それらの表からのアクセス制御はカスケードされません。 See Notes for details.
ENFORCED FOR ALL ACCESS
行権限がこの表のすべての参照に適用されるよう指定します。 表の行アクセス制御がアクティブになっている場合、データ操作ステートメントで表が参照されるときに、データベース・マネージャーは暗黙的に行権限を適用して表のアクセスを制御します。SELECT などのフェッチ操作で表が参照される場合、行権限の適用により、フェッチ操作を要求したユーザーが取得できる行セットの内容が決まります。 INSERT などのデータ変更操作で表が参照される場合、行権限の適用により、データ変更操作を要求したユーザーがすべての変更対象行で挿入または更新を実行できるかどうかが決まります。
ENABLE または DISABLE
行権限を使用可能または使用不可にするよう指定します。 デフォルトは DISABLE です。
DISABLE
行権限を使用不可にするよう指定します。表の行アクセス制御が現在アクティブになっていない場合、行権限は、表の行アクセス制御がアクティブになるときに無効のままとなります。
ENABLE
行アクセス制御で行権限を使用可能にするよう指定します。 表の行アクセス制御が現在アクティブになっていない場合、行権限は、表の行アクセス制御がアクティブになるときに有効になります。 表の行アクセス制御が現在アクティブになっている場合、行権限はただちに有効になり、この表を参照するすべてのパッケージと動的キャッシュ・ステートメントは無効になります。
行アクセス制御をアクティブにする方法と行権限の適用方法について詳しくは、ALTER TABLE ステートメントの ACTIVATE ROW ACCESS CONTROL 節を参照してください。

  • 表の行アクセス制御がアクティブになる前に作成する行権限: CREATE PERMISSION ステートメントは独立したステートメントであり、これを使用して、表の行アクセス制御がアクティブになる前に行権限を作成できます。 唯一の要件は、権限の作成前に表と列が存在していることです。 1 つの表に対して、複数の行権限を作成できます。

    行権限の定義はデータベース・カタログに格納されます。 権限の作成対象となる表への従属関係と、当該の定義で参照されるその他のオブジェクトへの従属関係が記録されます。 パッケージや動的キャッシュ・ステートメントは無効になりません。 行アクセス制御のために、行権限を使用可能または使用不可なものとして作成できます。 使用可能に設定された行権限は、ACTIVATE ROW ACCESS CONTROL 節が指定された ALTER TABLE ステートメントを使用して表の行アクセス制御をアクティブにすると、初めて有効になります。 表の行アクセス制御がアクティブになっても、使用不可に設定されている行権限は引き続き無効です。 ALTER PERMISSION ステートメントを使用して、ENABLE と DISABLE を切り替えることができます。

    表の行アクセス制御をアクティブにした後に、データ操作ステートメントで表が参照されるときに、その表に定義されたすべての使用可能な行権限が データベース・マネージャーによって暗黙的に適用されて、その表へのアクセスが制御されます。

    表を参照する動的キャッシュ・ステートメントおよびパッケージがいくつも無効になることを防ぐため、行権限を作成してから表の行アクセス制御をアクティブにするという順序で操作することをお勧めします。

  • 表の行アクセス制御がアクティブになった後に作成する行権限: 使用可能に設定された行権限は、コミットされるとすぐに有効になります。 表を参照するパッケージと動的キャッシュ・ステートメントはすべて無効になります。その後、データ操作ステートメントで表が参照されると、使用可能な行権限はすべて、そのステートメントに暗黙的に適用されます。 表の行アクセス制御がアクティブになっても、使用不可の行権限はすべて引き続き無効です。
  • 行アクセス制御または列アクセス制御が施行されている表を行権限定義内で参照している場合、カスケード効果はない: 行権限定義で、行アクセス制御または列アクセス制御が現在施行されている表と列を参照することがあります。 行権限の作成対象の表がデータ操作ステートメントで参照される場合、このような表のアクセス制御は無視されます。
  • データベース制限に関する考慮事項 : データ操作ステートメントで既に一部のデータベース制限に近づいている場合、作成される使用可能な行権限と使用可能な列マスクの数が多いほど、これらの行権限と列マスクが一部の制限に影響を与える可能性が高くなります。これは、データ操作ステートメントで表が参照される際に、使用可能な列マスク定義と使用可能な行権限定義が暗黙的にこのステートメントにマージされるためです。 ステートメントの制限については、『SQL と XML の制限』を参照してください。
  • 使用可能に設定されているが無効な状態にある権限: 行アクセス制御の権限が使用可能に設定されているものの、その状態が無効に設定されている場合、権限が定義された表へのアクセスは、この状態が解決されるまでブロックされます (SQLSTATE 560D0)。

銀行の現金出納係は、所属支店の顧客のデータのみにアクセスできます。 すべての現金出納係は、ロール TELLER のメンバーです。 顧客サービス担当者は、銀行の全顧客のデータにアクセスできます。 すべての顧客サービス担当者は、ロール CSR のメンバーです。 行権限は、SECADM 権限を持つユーザーにより、銀行内の各担当者グループに合わせて作成されます。 表 CUSTOMER の行レベルのアクセス制御がアクティブになった後で、SELECT ステートメントで両方の行権限の検索条件がこのステートメントにマージされ、論理 OR 演算子で結合されます。これにより、各グループがアクセスできる行の集合が制御されます。

CREATE PERMISSION TELLER_ROW_ACCESS ON CUSTOMER
 FOR ROWS WHERE VERIFY_ROLE_FOR_USER
 (SESSION_USER,'TELLER') = 1 AND
        BRANCH = (SELECT HOME_BRANCH FROM INTERNAL_INFO
             WHERE EMP_ID = SESSION_USER)
ENFORCED FOR ALL ACCESS
ENABLE;

CREATE PERMISSION CSR_ROW_ACCESS ON CUSTOMER
 FOR ROWS WHERE VERIFY_ROLE_FOR_USER(SESSION_USER,'CSR') = 1
 ENFORCED FOR ALL ACCESS
 ENABLE;