GRANT (表またはビューの特権)

この形式の GRANT ステートメントは、表またはビューに対する特権を認可します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

  • ステートメント内で識別された、それぞれの表またはビューごとに、
    • このステートメントで指定されるすべての特権
    • その表またはビューに対する *OBJMGT システム権限
    • 表やビューが入っているライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限
  • セキュリティー管理者権限

WITH GRANT OPTION を指定する場合、ステートメントの権限 ID によって保持される特権には、 少なくとも次の 1 つが含まれていなければなりません。

  • その表の所有権
  • データベース管理者権限
  • セキュリティー管理者権限

構文

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

                  .-,--------------.   
       .-TABLE-.  V                |   
>--ON--+-------+----+-table-name-+-+---------------------------->
                    '-view-name--'     

       .-,---------------------------------.                          
       V                                   |                          
>--TO----+-+-------+--authorization-name-+-+--+-------------------+-><
         | +-USER--+                     |    '-WITH GRANT OPTION-'   
         | '-GROUP-'                     |                            
         '-PUBLIC------------------------'                            

説明

ALL または ALL PRIVILEGES
1 つ以上の特権を認可します。認可される特権は、指定された表またはビューに対してステートメントの権限 ID が持っている認可可能な特権のすべてです。

表またはビューに対する ALL PRIVILEGES を認可することは、 *ALL システム権限を認可するのと同じではないことに注意する必要があります。

ALTER
指定の表を変更する特権、または指定の表でトリガーを作成または除去する特権を認可します。 表およびビューに対する COMMENT および LABEL ステートメントを使用する特権を認可します。
DELETE
指定の表またはビューから行を削除する特権を認可します。 ビューを指定する場合は、削除可能なビューでなければなりません。
INDEX
指定の表に索引を作成する特権を認可します。 この特権は、ビューに対して認可することはできません。
INSERT
指定の表またはビューに行を挿入する特権を認可します。 ビューを指定する場合は、挿入可能なビューでなければなりません。
REFERENCES
指定する表が親である場合に、参照制約を追加する特権を認可します。 列のリストが指定されていない場合、または ALL PRIVILEGES を指定することによって REFERENCES が表または ビューのすべての列に対して認可されている場合、被認可者は、親キーとして ON 文節内に 指定されている各表のすべての列を使用して、参照制約を追加することができます。 これは、ALTER TABLE ステートメントによって後から追加された列も対象となります。 この特権は、ビューの場合も認可できますが、ビューに対してはこ の特権は使用されません。
REFERENCES (column-name,…)
指定する表が親である場合に、 親キーとして列リストに指定されている列のみを使用して、 参照制約を追加する特権を認可します。 それぞれの列名 は、ON 文節に指定されている各表の列を識別する非修飾の名前でなければなりません。 この特権は、ビューの列の場合も認可できますが、ビューについてはこの特 権は使用されません。
SELECT
指定の表またはビューでビューを作成する特権またはデータを読み取る特権を認可します。 例えば、表またはビューが照会に指定されている場合、SELECT 特権が必要です。
UPDATE
指定の表またはビューで行を更新する特権を認可します。 列のリストが指定されていない場合、または ALL PRIVILEGES を指定することによって、 UPDATE が表またはビューのすべての列に対して認可されている場合、 被認可者は、ON 文節に指定されている各表のすべての更新可能列を更新することができます。 これは ALTER TABLE ステートメントによって後から追加された列も対象となります。 ビューを指定する場合は、更新可能なビューでなければなりません。
UPDATE (column-name,…)
列リストに示されている列のみを更新するために、UPDATE ステートメントを使用する特権を認可します。 それぞれの列名は、ON 文節に指定されている各表およびビューの列を識別する非修飾の名前でなければなりません。 ビューを指定する場合は、更新可能なビューでなければなりません。 さらに、指定する列は更新可能な列でなければなりません。
ON table-name または view-name,…
特権を認可する表またはビューを識別します。 表名 またはビュー名 は、現行サーバーにある表またはビューを示すものでなければなりませんが、宣言済み一時表を示すものであってはなりません。
TO
特権を認可するユーザーを指定します。
USER
authorization-name がユーザー・プロファイルであることを指定します。USER が指定される場合、authorization-name はグループ・プロファイルであってはなりません。
GROUP
authorization-name がグループ・プロファイルであることを指定します。GROUP が指定される場合、authorization-name は ユーザー・プロファイルであってはなりません。
authorization-name,…
1 つ以上の権限 ID をリストします。
PUBLIC
ユーザー (権限 ID) の集合に対して特権を認可します。詳しくは、権限、特権、およびオブジェクト所有権を参照してください。
WITH GRANT OPTION
指定した権限名 が、ON 文節で指定されている表およびビューに対する特権を他の ユーザーに認可できるようにします。

WITH GRANT OPTION の指定がない場合は、 指定した権限名 は、ON 文節で指定されている表およびビューに対する特権を別の ユーザーに認可することができません。 ただし、指定した権限名が、他の何らかの方法で認可できる権限を入手した場合 (例えば、*OBJMGT システム権限の認可) を除きます。

対応するシステム権限: GRANT および REVOKE ステートメントは、SQL オブジェクトに対する システム権限の割り当ておよび除去を行います。 次の表は、表に対して認可される SQL 特権に対応するシス テム権限を示しています。左側の欄は、SQL 特権をリストしています。 右側の欄は、認可または取り消しされる同等のシステム権限 をリストしています。

表 1. 表に対して認可または取り消しされる特権
SQL の特権 表に対する認可または取り消しに対応するシステム権限
ALL (ALL の GRANT または取り消しは、ステートメントの権限 ID が持つ 特権のみを認可または取り消します。)

*OBJALTER 1
*OBJMGT (取り消しのみ)
*OBJOPR
*OBJREF
*ADD
*DLT
*READ
*UPD

ALTER *OBJALTER 2
DELETE

*OBJOPR 3
*DLT

INDEX *OBJALTER 2
INSERT

*OBJOPR3
*ADD

REFERENCES *OBJREF2
SELECT

*OBJOPR3
*READ

UPDATE

*OBJOPR3
*UPD

WITH GRANT OPTION *OBJMGT

次の表は、ビューに対して認可される SQL 特権に対応する システム権限を示しています。 左側の欄は、SQL 特権をリストしています。 中央の欄は、ビュー自体に対して認可または取り消しされる同等のシステム権限をリストしています。 例えば、右側の欄にリストされているシステム 権限は、ビューの定義内で参照さているすべての表およびビューに対して認可 され、ビューが参照されている場合は、その定義で参照されているすべての表お よびビューのすべてに対して認可されます。 4

ビューが複数の表やビューを参照している場合、*DLT、*ADD、および *UPD システム権限は、そのビューの定義の全選択の最初の表、またはビューについてのみ認可されます。 *READ システム権限は、そのビューの定義で参照されているすべての表およびビューに関して認可されます。

ある SQL 特権に対応して、複数のシステム権限が認可される場合に、 それらの権限のいずれか 1 つを認可することができないと、警告が出され、 その特権に対応する権限はいずれも認可されません。GRANT とは異なり、REVOKE はビューに関するシステム権限を取り消すだけです。 参照される表やビューからシステム権限が取り消されることはありません。

表 2. ビューに対して認可または取り消しされる特権
SQL の特権 ビューに対する認可または取り消しに対応するシステム権限 参照された表およびビューに対する認可または取り消しに対応するシステム権限
ALL (ALL の GRANT または取り消しは、ステートメントの権限 ID が持つ 特権のみを認可または取り消します。)

*OBJALTER
*OBJMGT (取り消しのみ)
*OBJOPR
*OBJREF
*ADD
*DLT
*READ
*UPD

*ADD
*DLT
*READ
*UPD

ALTER *OBJALTER 2 なし
DELETE

*OBJOPR3
*DLT

*DLT
INDEX 該当しない 該当しない
INSERT

*OBJOPR3
*ADD

*ADD
REFERENCES *OBJREF2 なし
SELECT

*OBJOPR3
*READ

*READ
UPDATE

*OBJOPR3
*UPD

*UPD
WITH GRANT OPTION *OBJMGT なし

表またはビューへの権限を検査する際の対応するシステム権限: 次の表は、 表への権限を検査する際の、SQL 特権に対応するシステム権限を示しています。 左側の欄は、SQL 特権をリストしています。 右側の欄は、同等のシステム権限をリストしています。

表 3. 表への特権を検査する際の、対応するシステム権限
SQL の特権 表への特権を検査する際の、対応するシステム権限
ALTER *OBJALTER または *OBJMGT
DELETE

*OBJOPR および *DLT

INDEX *OBJALTER または *OBJMGT
INSERT

*OBJOPR および *ADD

REFERENCES *OBJREF または *OBJMGT
SELECT

*OBJOPR および *READ

UPDATE

*OBJOPR および *UPD

次の表は、ビューに対する特権を検査する際の SQL 特権に対応するシステム権限を示しています。 左側の欄は、SQL 特権をリストしています。 中央の欄は、ビュー自体に対して検査される同等のシステム権限をリストしています。 例えば、右側の欄にリストされているシステム権限は、 ビューの定義内で参照さているすべての表およびビューで検査され、 ビューが参照されている場合は、その定義で参照されているすべての表およびビューで検査されます。

表 4. ビューへの特権を検査する際の、対応するシステム権限
SQL の特権 ビューに対する対応するシステム権限 参照される表およびビューに対する対応するシステム権限
ALTER *OBJALTER および *OBJMGT なし
DELETE5

*OBJOPR および *DLT

*DLT
INDEX 該当しない 該当しない
INSERT6

*OBJOPR および *ADD

*ADD
REFERENCES *OBJREF または *OBJMGT なし
SELECT

*OBJOPR および *READ

*READ
UPDATE7

*OBJOPR および *UPD

*UPD

GRANT の規則: GRANT ステートメントで付与できるのは、ステートメントの権限 ID で付与できる特権に限られます。特権を付与できなかった場合は、エラーが返されます。

例 1: 表 WESTERN_CR に対するすべての特権を PUBLIC に認可します。

  GRANT ALL PRIVILEGES ON WESTERN_CR
    TO PUBLIC

例 2: 表 CALENDAR に関する適切な特権を認可して、 PHIL および CLAIRE が表 CALENDAR を読み取って、新しい項目を挿入できるようにします。 PHIL および CLAIRE には、既存の項目の変更や削除は許しません。

  GRANT SELECT, INSERT ON CALENDAR
    TO PHIL, CLAIRE

例 3: TABLE1 および VIEW1 関する列特権を FRED に認可します。 この GRANT ステートメントの中に指定されている列が両方とも、TABLE1 と VIEW1 のどちらにもなければなりません。

   GRANT UPDATE(column_1, column_2)
     ON  TABLE1, VIEW1
     TO FRED WITH GRANT OPTION

1 SQL の INDEX および ALTER 特権は、同じシステム権限 *OBJALTER に対応しています。 INDEX と ALTER の両方を認可しても、ユーザーに与えられる権限が増加 するわけではありません。
2 WITH GRANT OPTION が与え られたユーザーは、ALTER および REFERENCES 権限によって与えられる機能 も実行することができます。
3 *OBJOPR が取り消されるのは、指定の権限 ID または PUBLIC で *OBJOPR 以外の最後のシステム特権も取り消される場合に限られます。
4 指定した権限が、ビューの定義で 参照されている表およびビューに認可されるのは、権限の認可対象のユーザーが別の権限ソースからそのような 権限 (例えば共通認可の権限) を入手していない場合だけに限られます。
5 ビューが作成される際に、その所有者は、必ずしもそのビューに対する DELETE 特権を獲得するとは限りません。 所有者が DELETE 特権を獲得するのは、そのビューが削除を許されており、 しかも所有者が副選択で参照されている最初の表に対しても DELETE 特権を持っている場合だけです。
6 ビューが作成される際に、その所有者は、必ずしもそのビューに対する INSERT 特権を獲得するとは限りません。 所有者が INSERT 特権を獲得するのは、そのビューが挿入を許されており、 しかも所有者が副選択で参照されている最初の表に対しても INSERT 特権を持っている場合だけです。
7 ビューが作成される際に、その所有者は、必ずしもそのビューに対する UPDATE 特権を獲得するとは限りません。 所有者が UPDATE 特権を獲得するのは、そのビューが更新を許可し、 しかも所有者が副選択で参照されている最初の表に対して UPDATE 特権を保有している場合だけに限られます。