この形式の 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-'
注:
- ALTER、INDEX、および REFERENCES 特権は、ビューには適用されません。
説明
- ALL または ALL PRIVILEGES
- ON 節で指定する基本表、ビュー、またはニックネームについて、
該当するすべての特権 (CONTROL を除く) を付与します。
ステートメントの許可 ID が表、ビュー、またはニックネームに対して CONTROL 特権を持っている場合、
あるいは ACCESSCTRL 権限または SECADM 権限を持っている場合には、
オブジェクトに適用できる特権のすべて (CONTROL を除く) が与えられます。
そうでない場合、与えられる特権は、ステートメントの許可 ID が指定の表、
ビュー、またはニックネームに対して持っているすべての付与可能な特権です。
ALL の指定がない場合、
特権のリストに示されているキーワードの 1 つまたは複数を指定する必要があります。
- ALTER
- 以下のことを行うための特権を付与します。
- CONTROL
- 以下を付与します。
基本表、マテリアライズ照会表、ステージング表、
またはニックネームの定義者には、自動的に 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)。
規則
- 指定したそれぞれの authorization-name に関して、USER、GROUP、ROLE のいずれも指定されていない場合には、次のようになります。
- インスタンスに対して有効なセキュリティー・プラグインによって authorization-name の状況を判別できなければ、エラーが戻されます (SQLSTATE 56092)。
- authorization-name がデータベースでは ROLE として定義され、有効なセキュリティー・プラグインでは GROUP または USER のいずれかとして定義されている場合には、エラーが戻されます (SQLSTATE 56092)。
- 有効になっているセキュリティー
・プラグインに従って authorization-name が USER と GROUP の両方として定義されている場合、
エラーが戻されます (SQLSTATE 56092)。
- 有効になっているセキュリティー
・プラグインに従って authorization-name が USER としてのみ定義されている場合、または未定義の場合、USER であると見なされます。
- 有効になっているセキュリティー
・プラグインに従って authorization-name が GROUP としてのみ定義されている場合、GROUP であると見なされます。
- authorization-name がデータベースで ROLE としてのみ定義されている場合には、ROLE であると見なされます。
- 一般に、GRANT ステートメントはステートメントの許可 ID が与えることを許されている特権の GRANT のみを処理し、
1 つ以上の特権が与えられなかった場合は警告 (SQLSTATE 01007) を戻します。
どのような特権も与えられなかった場合は、エラーが戻されます (SQLSTATE 42501)。
ステートメントの処理に使用されるパッケージが、
LANGLEVEL を SQL92E または MIA に設定してプリコンパイルされていた場合、
付与者が GRANT 操作の対象に対して特権を持っていない場合以外は警告が戻されます (SQLSTATE 01007)。
CONTROL 特権を指定する場合、特権が与えられるのは、
ステートメントの許可 ID に ACCESSCTRL または SECADM 権限を持っているときだけです (SQLSTATE 42501)。
注
- 特権は表階層のどのレベルにも個別に付与できます。
スーパー表に対する特権を持つユーザーは、その副表にも影響を及ぼす場合があります。例えば、スーパー表 T に対する UPDATE 特権は持っているものの、T の副表である S に対する UPDATE 特権は持っていないユーザーが T を指定して更新を要求すると、S 内にある行も変更される場合があります。一方、ユーザーが副表を直接操作する場合には、その副表に対して必要な特権を持っていなければなりません。
- ニックネーム特権を付与しても、
データ・ソース・オブジェクト (表またはビュー) の特権に与える影響はありません。
通常、データ・ソースの特権は、データの検索を試行する際、
ニックネームが参照する表またはビューで必要とされます。
- 代替構文:
DB2 の以前のバージョンおよび他のデータベース製品との互換性のために、以下がサポートされています。以下の構文は許容されますが、無視されます。
例
例 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