この形式の 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-'
注:
説明
ステートメントの許可 ID が表、視点、またはニックネームに対して CONTROL 特権を持っている場合、 あるいは DBADM 権限または SYSADM 権限を持っている場合には、 オブジェクトに適用できる特権のすべて (CONTROL を除く) が与えられます。 そうでない場合、与えられる特権は、ステートメントの許可 ID が指定の表、 視点、またはニックネームに対して持っているすべての授与可能な特権です。
ALL の指定がない場合、 特権のリストに示されているキーワードの 1 つまたは複数を指定する必要があります。
親表のそれぞれの列に対する REFERENCES 特権も必要です。
CONTROL 特権があっても、この特権を他のユーザーに拡張することはできません。 拡張するための唯一の方法は、CONTROL 特権を付与することであり、 それは SYSADM または DBADM の権限を持つユーザーのみが行うことができます。
基礎表または要約表の定義者には、自動的に CONTROL 特権が付与されます。
視点の定義者に全選択で指定されているすべての表、視点、 およびニックネームに対する CONTROL 特権が与えられている場合、 その定義者には自動的に CONTROL 特権が付与されます。
ステートメントの許可 ID が以下のいずれかを持っている場合、
特権を与えられたユーザーは、 表のすべての列を親キーとして使用して参照制約を作成できます (ALTER TABLE ステートメントを使用して後で追加された列であっても)。 そうでない場合、 付与される特権はステートメントの許可 ID が指定の表に対して持っているすべての列の付与可能な REFERENCE 特権です。 外部キーの作成または除去に必要な権限については、ALTER TABLE を参照してください。
ニックネームを参照するために外部キーを定義できなくても、この特権はニックネームに付与することができます。
ステートメントの許可 ID が以下のいずれかを持っている場合、
特権を与えられたユーザーは、 付与者が付与特権を持っている表または視点のすべての更新可能な列を更新できます (ALTER TABLE ステートメントを使用して後で追加された列であっても)。 そうでない場合、与えられる特権はステートメントの許可 ID が指定の表または視点に対して持っているすべての列の授与可能な UPDATE 特権です。
作動不能な視点または作動不能な要約表に対する特権を付与することはできません (SQLSTATE 51024)。 宣言された一時表に対する特権を付与することはできません (SQLSTATE 42995)。
グループに与えた特権は、パッケージ内の静的 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');
指定した特権に 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