DB2 Version 9.7 for Linux, UNIX, and Windows

GRANT (表、ビュー、またはニックネーム特権) ステートメント

この形式の GRANT ステートメントは、表、ビュー、またはニックネームに対する特権を付与します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかが含まれていなければなりません。
  • 参照されている表、ビュー、またはニックネームに対する CONTROL 特権
  • 指定したそれぞれの特権に対する WITH GRANT OPTION。 ALL を指定する場合、許可 ID は指定した表、ビュー、 またはニックネームに対して何らかの付与可能な特権を持っている必要があります。
  • ACCESSCTRL または SECADM 権限

ACCESSCTRL または SECADM 権限は、CONTROL 特権を付与するため、またはカタログ表およびビューに対する特権を付与するために必要です。

構文

構文図を読む構文図をスキップする
                 .-PRIVILEGES-.                               
>>-GRANT--+-ALL--+------------+---------------------------+----->
          | .-,-----------------------------------------. |   
          | V                                           | |   
          '---+-ALTER---------------------------------+-+-'   
              +-CONTROL-------------------------------+       
              +-DELETE--------------------------------+       
              +-INDEX---------------------------------+       
              +-INSERT--------------------------------+       
              +-REFERENCES--+-----------------------+-+       
              |             |    .-,-----------.    | |       
              |             |    V             |    | |       
              |             '-(----column-name-+--)-' |       
              +-SELECT--------------------------------+       
              '-UPDATE--+-----------------------+-----'       
                        |    .-,-----------.    |             
                        |    V             |    |             
                        '-(----column-name-+--)-'             

       .-TABLE-.                      
>--ON--+-------+--+-table-name----+----------------------------->
                  |           (1) |   
                  +-view-name-----+   
                  '-nickname------'   

       .-,---------------------------------.   
       V                                   |   
>--TO----+-+-------+--authorization-name-+-+-------------------->
         | +-USER--+                     |     
         | +-GROUP-+                     |     
         | '-ROLE--'                     |     
         '-PUBLIC------------------------'     

>--+-------------------+---------------------------------------><
   '-WITH GRANT OPTION-'   

注:
  1. ALTER、INDEX、および REFERENCES 特権は、ビューには適用されません。

説明

ALL または ALL PRIVILEGES
ON 節で指定する基本表、ビュー、またはニックネームについて、 該当するすべての特権 (CONTROL を除く) を付与します。

ステートメントの許可 ID が表、ビュー、またはニックネームに対して CONTROL 特権を持っている場合、 あるいは ACCESSCTRL 権限または SECADM 権限を持っている場合には、 オブジェクトに適用できる特権のすべて (CONTROL を除く) が与えられます。 そうでない場合、与えられる特権は、ステートメントの許可 ID が指定の表、 ビュー、またはニックネームに対して持っているすべての付与可能な特権です。

ALL の指定がない場合、 特権のリストに示されているキーワードの 1 つまたは複数を指定する必要があります。

ALTER
以下のことを行うための特権を付与します。
  • 基本表の定義に列を追加する。
  • 基本表の主キー制約またはユニーク制約を作成またはドロップする。
  • 基本表の外部キーを作成またはドロップする。

    親表のそれぞれの列に対する REFERENCES 特権も必要です。

  • 基本表のチェック制約を作成またはドロップする。
  • 基本表のトリガーを作成する。
  • ニックネームの列オプションを追加、リセット、またはドロップする。
  • ニックネームの列名またはデータ・タイプを変更する。
  • 基本表、またはニックネームのコメントを追加または変更する。
CONTROL
以下を付与します。
  • リストに示されているすべての特権。 すなわち、
    • 基本表に対する ALTER、CONTROL、DELETE、INSERT、INDEX、 REFERENCES、SELECT、および UPDATE
    • ビューに対する CONTROL、DELETE、INSERT、SELECT、および UPDATE
    • ニックネームに対する ALTER、CONTROL、INDEX、および REFERENCES
  • 他のユーザーに上記の特権 (CONTROL を除く) を付与する特権。
  • 基本表、ビュー、またはニックネームをドロップする特権。

    CONTROL 特権があっても、この特権を他のユーザーに拡張することはできません。拡張するための唯一の方法は、CONTROL 特権を付与することであり、それは ACCESSCTRL または SECADM の権限を持つ許可 ID のみが行うことができます。

  • 表と索引に対して RUNSTATS ユーティリティーを実行する特権。
  • 表に対して REORG ユーティリティーを実行する特権。
  • 基本表、マテリアライズ照会表、 またはステージング表に対して SET INTEGRITY ステートメントを発行する特権。

基本表、マテリアライズ照会表、ステージング表、 またはニックネームの定義者には、自動的に CONTROL 特権が付与されます。

ビューの定義者に全選択で指定されているすべての表、ビュー、 およびニックネームに対する CONTROL 特権が与えられている場合、 その定義者には自動的に CONTROL 特権が付与されます。

DELETE
表または更新可能なビューから行を削除する特権を付与します。
INDEX
表の索引、またはニックネームの SPECIFICATION ONLY 指定の索引を作成する特権を付与します。 この特権は、ビューに対して付与することはできません。 索引または SPECIFICATION ONLY 指定の索引の作成者には、 その索引または SPECIFICATION ONLY 指定の索引に対する CONTROL 特権が自動的に与えられます (これにより、 作成者は索引または SPECIFICATION ONLY 指定の索引をドロップできます)。 さらに、INDEX 特権が取り消されても、作成者は CONTROL 特権をそのまま保持します。
INSERT
表または更新可能なビューに行を挿入し、 IMPORT ユーティリティーを実行する特権を与えます。
REFERENCES
親表を参照するための外部キーの作成やドロップを行う特権を付与します。
ステートメントの許可 ID が以下のいずれかを持っている場合、
  • ACCESSCTRL または SECADM 権限
  • 表に対する CONTROL 特権
  • 表に対する REFERENCES WITH GRANT OPTION
特権を与えられたユーザーは、 表のすべての列を親キーとして使用して参照制約を作成できます (ALTER TABLE ステートメントを使用して後で追加された列であっても)。 そうでない場合、 付与される特権はステートメントの許可 ID が指定の表に対して持っているすべての列の付与可能な REFERENCE 特権です。

この特権はニックネームに付与することができますが、ニックネームを参照するために外部キーは定義できません。

REFERENCES (column-name,...)
列のリストに指定された列のみを親キーとして使用して外部キーを作成およびドロップする特権を与えます。 各 column-name (列名) は、 ON 節で指定される表の列を指定する非修飾名でなければなりません。 型付き表、型付きビュー、 またはニックネームに対する列レベルの REFERENCES 特権は付与できません (SQLSTATE 42997)。
SELECT
以下のことを行うための特権を付与します。
  • 表またはビューから行を検索する特権。
  • 表にビューを作成する特権。
  • 表またはビューに対して EXPORT ユーティリティーを実行する特権。
UPDATE
ON 節で指定される表または更新可能なビューに対して UPDATE ステートメントを使用する特権を付与します。
ステートメントの許可 ID が以下のいずれかを持っている場合、
  • ACCESSCTRL または SECADM 権限
  • 表またはビューに対する CONTROL 特権
  • その表またはビューに対する UPDATE WITH GRANT OPTION
特権を与えられたユーザーは、 付与者が GRANT 特権を持っている表またはビューのすべての更新可能な列を更新できます (ALTER TABLE ステートメントを使用して後で追加された列であっても)。 そうでない場合、与えられる特権はステートメントの許可 ID が指定の表またはビューに対して持っているすべての列の付与可能な UPDATE 特権です。
UPDATE (column-name,...)
列のリストに指定した列だけを、 UPDATE ステートメントを使用して更新する特権を付与します。 各 column-name は、 ON 節で指定される表またはビューの列を指定する非修飾名でなければなりません。 型付き表、型付きビュー、 またはニックネームに対する列レベルの UPDATE 特権は付与できません (SQLSTATE 42997)。
ON TABLE table-name または view-name または nickname
特権を付与する表、ビュー、またはニックネームを指定します。

作動不能なビューまたは作動不能なマテリアライズ照会表に対する特権を付与することはできません (SQLSTATE 51024)。 宣言済み一時表に対する特権を付与することはできません (SQLSTATE 42995)。

TO
特権を誰に与えるかを指定します。
USER
authorization-name がユーザーであることを指定します。
GROUP
authorization-name がグループ名であることを指定します。
ROLE
authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
authorization-name,...
1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。
グループに付与された特権は、次のような許可検査では使用されません。
  • パッケージ内の静的 DML ステートメントに対する許可検査
  • CREATE VIEW ステートメントの処理過程での基本表に対する許可検査
  • マテリアライズ照会表の CREATE TABLE ステートメントの処理過程での基本表に対する許可検査
DB2® Database for Linux, UNIX, and Windows の場合、グループに付与される表特権は、動的に準備されるステートメントにのみ適用されます。 例えば、PROJECT 表に対する INSERT 特権がグループ D204 に与えられ、 UBIQUITY (D204 のメンバー) には与えられていない場合、 UBIQUITY は以下のステートメントを出すことができます。
   EXEC SQL EXECUTE IMMEDIATE :INSERT_STRING;
ここで、ストリングの内容は次のとおりです。
   INSERT INTO PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP)
   VALUES ('AD3114', 'TOOL PROGRAMMING', 'D21', '000260');
ただし、以下のステートメントを含むプログラムをプリコンパイルまたはバインドすることはできません。
   EXEC SQL INSERT INTO PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP)
   VALUES ('AD3114', 'TOOL PROGRAMMING', 'D21', '000260');
PUBLIC
特権をユーザー (許可 ID) の集合に付与します。 詳細は、『許可、特権、およびオブジェクト所有権』を参照してください。 静的 SQL ステートメントおよび CREATE VIEW ステートメントに対して PUBLIC に与えられた特権の使用に関する、 以前の制約は除かれました。
WITH GRANT OPTION
指定した authorization-name に対し、特権を他のユーザーに与えることを許可します。

指定した特権に CONTROL が含まれる場合、 WITH GRANT OPTION は CONTROL を除くすべての適用可能な特権に適用されます (SQLSTATE 01516)。

規則

例 1: 表 WESTERN_CR に対するすべての特権を PUBLIC に与えます。
   GRANT ALL ON WESTERN_CR
      TO PUBLIC
例 2: ユーザー PHIL と CLAIRE が CALENDAR 表を読み取り、 また新しい項目を挿入することができるように、CALENDAR 表に対する適切な特権を付与します。 既存の項目の変更や削除を行うことは許可しません。
   GRANT SELECT, INSERT ON CALENDAR
      TO USER  PHIL, USER CLAIRE
例 3: COUNCIL 表に対するすべての特権と、その特権を他のユーザーに適用する特権をユーザー FRANK に付与します。
   GRANT ALL ON COUNCIL
      TO USER FRANK WITH GRANT OPTION
例 4: 表 CORPDATA.EMPLOYEE に対する SELECT 特権を JOHN という名前のユーザーに付与します。 JOHN と呼ばれるユーザーは存在していますが、JOHN と呼ばれるグループは存在していません。
   GRANT SELECT ON CORPDATA.EMPLOYEE TO JOHN
または
   GRANT SELECT
     ON CORPDATA.EMPLOYEE TO USER JOHN
例 5: 表 CORPDATA.EMPLOYEE に対する SELECT 特権を JOHN という名前のグループに付与します。 JOHN と呼ばれるグループは存在していますが、 JOHN と呼ばれるユーザーは存在していません。
   GRANT SELECT ON CORPDATA.EMPLOYEE TO JOHN
または
   GRANT SELECT ON CORPDATA.EMPLOYEE TO GROUP JOHN
例 6: D024 という名前のグループと、D024 という名前のユーザーの両方に、 表 T1 に対する INSERT および SELECT 特権を付与します。
   GRANT INSERT, SELECT ON TABLE T1
     TO GROUP D024, USER D024

この場合、D024 グループのメンバーとユーザー D024 はいずれも、 表 T1 に対する INSERT と SELECT を使用できるようになります。 また、SYSCAT.TABAUTH カタログ・ビューには 2 つの行が追加されることになります。

例 7: ユーザー FRANK に、CALENDAR 表に対する INSERT、SELECT、および CONTROL 特権を付与します。 FRANK は特権を他のユーザーに渡すことが可能である必要があります。
   GRANT CONTROL ON TABLE CALENDAR
     TO FRANK WITH GRANT OPTION

このステートメントの結果、 CONTROL に WITH GRANT OPTION が与えられなかったことを示す警告 (SQLSTATE 01516) が出されます。 Frank は、INSERT と SELECT を含む CALENDAR に対する特権を必要に応じて付与することが可能になります。 FRANK は、ACCESSCTRL 権限または SECADM 権限を持っていない限り、 他のユーザーに CALENDAR に対する CONTROL 特権を付与することはできません。

例 8: ユーザー JON が、索引のない Oracle 表のニックネームを作成しました。 ニックネームは ORAREM1 です。 その後、Oracle DBA がこの表の索引を定義しました。 そのため、ユーザー SHAWN は、 さらに効率よく表にアクセスするための戦略をオプティマイザーが立てられるようにするため、 この索引の存在を DB2 に認識させたいと思っています。 SHAWN は、ORAREM1 の SPECIFICATION ONLY 指定の索引を作成することにより、 索引を DB2 に認識させることができます。 SHAWN が SPECIFICATION ONLY 指定の索引を作成できるようにするため、 このニックネームに対する索引特権を SHAWN に与えます。
   GRANT INDEX ON NICKNAME ORAREM1
     TO USER SHAWN