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 特権をリストしています。 右側の欄は、認可または取り消しされる同等のシステム権限 をリストしています。
SQL の特権 | 表に対する認可または取り消しに対応するシステム権限 |
---|---|
ALL (ALL の GRANT または取り消しは、ステートメントの権限 ID が持つ 特権のみを認可または取り消します。) | *OBJALTER 1 |
ALTER | *OBJALTER 2 |
DELETE | *OBJOPR 3 |
INDEX | *OBJALTER 2 |
INSERT | *OBJOPR3 |
REFERENCES | *OBJREF2 |
SELECT | *OBJOPR3 |
UPDATE | *OBJOPR3 |
WITH GRANT OPTION | *OBJMGT |
次の表は、ビューに対して認可される SQL 特権に対応する システム権限を示しています。 左側の欄は、SQL 特権をリストしています。 中央の欄は、ビュー自体に対して認可または取り消しされる同等のシステム権限をリストしています。 例えば、右側の欄にリストされているシステム 権限は、ビューの定義内で参照さているすべての表およびビューに対して認可 され、ビューが参照されている場合は、その定義で参照されているすべての表お よびビューのすべてに対して認可されます。 4
ビューが複数の表やビューを参照している場合、*DLT、*ADD、および *UPD システム権限は、そのビューの定義の全選択の最初の表、またはビューについてのみ認可されます。 *READ システム権限は、そのビューの定義で参照されているすべての表およびビューに関して認可されます。
ある SQL 特権に対応して、複数のシステム権限が認可される場合に、 それらの権限のいずれか 1 つを認可することができないと、警告が出され、 その特権に対応する権限はいずれも認可されません。GRANT とは異なり、REVOKE はビューに関するシステム権限を取り消すだけです。 参照される表やビューからシステム権限が取り消されることはありません。
SQL の特権 | ビューに対する認可または取り消しに対応するシステム権限 | 参照された表およびビューに対する認可または取り消しに対応するシステム権限 |
---|---|---|
ALL (ALL の GRANT または取り消しは、ステートメントの権限 ID が持つ 特権のみを認可または取り消します。) | *OBJALTER |
*ADD |
ALTER | *OBJALTER 2 | なし |
DELETE | *OBJOPR3 |
*DLT |
INDEX | 該当しない | 該当しない |
INSERT | *OBJOPR3 |
*ADD |
REFERENCES | *OBJREF2 | なし |
SELECT | *OBJOPR3 |
*READ |
UPDATE | *OBJOPR3 |
*UPD |
WITH GRANT OPTION | *OBJMGT | なし |
表またはビューへの権限を検査する際の対応するシステム権限: 次の表は、 表への権限を検査する際の、SQL 特権に対応するシステム権限を示しています。 左側の欄は、SQL 特権をリストしています。 右側の欄は、同等のシステム権限をリストしています。
SQL の特権 | 表への特権を検査する際の、対応するシステム権限 |
---|---|
ALTER | *OBJALTER または *OBJMGT |
DELETE | *OBJOPR および *DLT |
INDEX | *OBJALTER または *OBJMGT |
INSERT | *OBJOPR および *ADD |
REFERENCES | *OBJREF または *OBJMGT |
SELECT | *OBJOPR および *READ |
UPDATE | *OBJOPR および *UPD |
次の表は、ビューに対する特権を検査する際の SQL 特権に対応するシステム権限を示しています。 左側の欄は、SQL 特権をリストしています。 中央の欄は、ビュー自体に対して検査される同等のシステム権限をリストしています。 例えば、右側の欄にリストされているシステム権限は、 ビューの定義内で参照さているすべての表およびビューで検査され、 ビューが参照されている場合は、その定義で参照されているすべての表およびビューで検査されます。
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