SQL 解説書

GRANT (表、視点、またはニックネーム特権)

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

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、 あるいは動的 SQL ステートメントの使用によって発行することができます。 このステートメントは、動的に作成できる実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合は、 ステートメントを動的に作成することはできません (SQLSTATE 42509)。

許可

このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。

CONTROL 特権を付与するには、SYSADM または DBADM の権限が必要です。

カタログ表とカタログ視点に対する特権を付与するには、 SYSADM 権限または DBADM 権限のいずれかが必要です。

他の GRANT ステートメントについては、GRANT (データベース権限)GRANT (索引特権)GRANT (パッケージ特権)GRANT (スキーマ特権)、および GRANT (サーバー特権)を参照してください。

構文

>>-GRANT-------------------------------------------------------->
 
             .-PRIVILEGES--.
>-----+-ALL--+-------------+-----------------------------------+>
      |  .-,-------------------------------------------------. |
      |  V                                                   | |
      '----+-ALTER----------------------------------------+--+-'
           +-CONTROL--------------------------------------+
           +-DELETE---------------------------------------+
           +-INDEX----------------------------------------+
           +-INSERT---------------------------------------+
           +-REFERENCES----+----------------------------+-+
           |               |    .-,--------------.      | |
           |               |    V                |      | |
           |               '-(-----column-name---+---)--' |
           +-SELECT---------------------------------------+
           '-UPDATE--+----------------------------+-------'
                     |    .-,--------------.      |
                     |    V                |      |
                     '-(-----column-name---+---)--'
 
         .-TABLE--.
>----ON--+--------+---+-table-name-----+------------------------>
                      |           (1)  |
                      +-view-name------+
                      |          (2)   |
                      '-nickname-------'
 
         .-,------------------------------------.
         V                                      |
>----TO----+-+-------+---authorization-name--+--+--------------->
           | +-USER--+                       |
           | '-GROUP-'                       |
           '-PUBLIC--------------------------'
 
>----+-------------------+-------------------------------------><
     '-WITH GRANT OPTION-'
 

注:

  1. ALTER、INDEX、および REFERENCES 特権は、視点には適用されません。

  2. DELETE、INSERT、SELECT、および UPDATE 特権は、ニックネームには適用できません。

説明

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

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

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

ALTER
以下のことを行うための特権を付与します。

CONTROL
以下を付与します。

基礎表または要約表の定義者には、自動的に CONTROL 特権が付与されます。

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

DELETE
表または更新可能な視点から行を削除する特権を付与します。

INDEX
表の索引、またはニックネームの索引指定を作成する特権を付与します。 索引または索引指定の作成者には、 その索引または索引指定に対する CONTROL 特権が自動的に与えられます (これにより、 作成者は索引または索引指定を除去できます)。 さらに、INDEX 特権が取り消されても、作成者は CONTROL 特権をそのまま保持します。

INSERT
表または更新可能な視点に行を挿入し、 IMPORT ユーティリティーを実行する特権を与えます。

REFERENCES
表を親として参照する外部キーの作成や除去を行う特権を付与します。

ステートメントの許可 ID が以下のいずれかを持っている場合、

特権を与えられたユーザーは、 表のすべての列を親キーとして使用して参照制約を作成できます (ALTER TABLE ステートメントを使用して後で追加された列であっても)。 そうでない場合、 付与される特権はステートメントの許可 ID が指定の表に対して持っているすべての列の付与可能な REFERENCE 特権です。 外部キーの作成または除去に必要な権限については、ALTER TABLE を参照してください。

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

REFERENCES (column-name,...)
列のリスト指定された列のみを親キーとして使用して外部キーを作成および除去する特権を与えます。 各 column-name (列名) は、 ON 文節で指定される表の列を指定する非修飾名でなければなりません。 タイプ付き表、タイプ付き視点、 またはニックネームに対する列レベルの REFERENCES 特権は付与できません (SQLSTATE 42997)。

SELECT
以下のことを行うための特権を付与します。

UPDATE
ON 文節で指定される表または更新可能な視点に対して UPDATE ステートメントを使用する特権を付与します。

ステートメントの許可 ID が以下のいずれかを持っている場合、

特権を与えられたユーザーは、 付与者が付与特権を持っている表または視点のすべての更新可能な列を更新できます (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 がグループ名であることを指定します。

authorization-name,...
1 人または複数のユーザーまたはグループの許可 ID をリストします。 99

グループに与えた特権は、パッケージ内の静的 DML ステートメントに対する許可検査では使用されません。 それは、CREATE VIEW ステートメントの処理過程での基礎表に対する許可検査においても使用されません。

DB2 ユニバーサル・データベースの場合、グループに付与される表特権は、動的に作成されたステートメントにのみ適用されます。 たとえば、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
すべてのユーザーに特権を付与します。 100

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 は、SYSADM 権限または DBADM 権限を持っていない限り、 他のユーザーに CALENDAR に対する CONTROL 特権を付与することはできません。

例 8: ユーザー JON が、 索引のない Oracle 表のニックネームを作成しました。 ニックネームは ORAREM1 です。 その後、Oracle DBA がこの表の索引を定義しました。 そのため、ユーザー SHAWN は、 さらに効率よく表にアクセスするための戦略を最適化プログラムが立てられるようにするため、 この索引の存在を DB2 に認識させたいと思っています。 SHAWN は、ORAREM1 の索引指定を作成することにより、 索引を DB2 に認識させることができます。 SHAWN が索引指定を作成できるようにするため、 このニックネームに対する索引特権を SHAWN に与えます。

  GRANT INDEX ON NICKNAME ORAREM1
     TO USER SHAWN 


脚注:

99
ステートメントを発行しているユーザーの許可 ID への授与に関する以前のバージョンでの制約はなくなりました。

100
静的 SQL ステートメントおよび CREATE VIEW ステートメントに対して PUBLIC に与えられた特権の使用に関する以前のバージョンでの制約は除かれました。

101
ステートメントの処理に使用されるパッケージが、 LANGLEVEL を SQL92E または MIA に設定してプリコンパイルされていた場合、 授与者が授与の対象に対して何の特権も持っていない場合以外は警告が戻されます (SQLSTATE 01007)。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]