3.16.2 アクセス権限の付与
HADBユーザにアクセス権限を付与します。
- 〈この項の構成〉
(1) 指定形式
GRANT文::=GRANT アクセス権限 ON オブジェクト名 TO 権限受領者 〔WITH GRANT OPTION〕 アクセス権限::={ALL 〔PRIVILEGES〕|動作〔,動作〕…} 動作::={SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES |IMPORT TABLE|REBUILD INDEX|GET COSTINFO|EXPORT TABLE |MERGE CHUNK|CHANGE CHUNK COMMENT|CHANGE CHUNK STATUS |ARCHIVE CHUNK|UNARCHIVE CHUNK} オブジェクト名::={〔TABLE〕 表名|ALL TABLES} 権限受領者::={認可識別子〔,認可識別子〕…|PUBLIC}
(2) 指定形式の説明
- ●アクセス権限
-
アクセス権限::={ALL 〔PRIVILEGES〕|動作〔,動作〕…}
付与するアクセス権限の種類を指定します。
- ALL 〔PRIVILEGES〕:
-
すべてのアクセス権限を付与する場合に指定します。
すべてのアクセス権限とは,GRANT文を実行する時点でサポートされているすべてのアクセス権限を意味しています。GRANT文の実行後に,バージョンアップによって新たにサポートされたアクセス権限は対象になりません(自動的に権限が付与されるようなことはありません)。
- 重要
-
付与権を持っているのが一部の種類のアクセス権限だけの場合に,ALL PRIVILEGESを指定してGRANT文を実行しても,すべての種類のアクセス権限は付与されません。この場合,付与権を持っているアクセス権限だけが権限受領者に付与されます。例えば,付与権を持っているのがINSERT権限だけの場合に,ALL PRIVILEGESを指定してGRANT文を実行すると,INSERT権限だけが権限受領者に付与されます。
- メモ
-
付与対象オブジェクトに対する付与権付きのアクセス権限を1種類も持っていない場合に,ALL PRIVILEGESを指定すると,GRANT文がエラーになります。
- 動作〔,動作〕…:
-
動作::={SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES |IMPORT TABLE|REBUILD INDEX|GET COSTINFO|EXPORT TABLE |MERGE CHUNK|CHANGE CHUNK COMMENT|CHANGE CHUNK STATUS |ARCHIVE CHUNK|UNARCHIVE CHUNK}
付与するアクセス権限の種類を指定します。同じ動作を重複して指定できません。
-
SELECT
HADBユーザにSELECT権限を付与する場合に指定します。
-
INSERT
HADBユーザにINSERT権限を付与する場合に指定します。
-
UPDATE
HADBユーザにUPDATE権限を付与する場合に指定します。
-
DELETE
HADBユーザにDELETE権限を付与する場合に指定します。
-
TRUNCATE
HADBユーザにTRUNCATE権限を付与する場合に指定します。
-
REFERENCES
HADBユーザにREFERENCES権限を付与する場合に指定します。
-
IMPORT TABLE
HADBユーザにIMPORT TABLE権限を付与する場合に指定します。
-
REBUILD INDEX
HADBユーザにREBUILD INDEX権限を付与する場合に指定します。
-
GET COSTINFO
HADBユーザにGET COSTINFO権限を付与する場合に指定します。
-
EXPORT TABLE
HADBユーザにEXPORT TABLE権限を付与する場合に指定します。
-
MERGE CHUNK
HADBユーザにMERGE CHUNK権限を付与する場合に指定します。
-
CHANGE CHUNK COMMENT
HADBユーザにCHANGE CHUNK COMMENT権限を付与する場合に指定します。
-
CHANGE CHUNK STATUS
HADBユーザにCHANGE CHUNK STATUS権限を付与する場合に指定します。
-
ARCHIVE CHUNK
HADBユーザにARCHIVE CHUNK権限を付与する場合に指定します。
-
UNARCHIVE CHUNK
HADBユーザにUNARCHIVE CHUNK権限を付与する場合に指定します。
-
- ●ON オブジェクト名
-
オブジェクト名::={〔TABLE〕 表名|ALL TABLES}
アクセス権限を付与する際の,対象オブジェクトを指定します。
なお,オブジェクトとは,スキーマオブジェクトのことを意味しています。
- 〔TABLE〕 表名:
-
ここで指定した表に対するアクセス権限を付与します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。
なお,無効化されているビュー表の表名は指定できません。
- ALL TABLES:
-
実行ユーザのスキーマ内の全実表に対するアクセス権限を付与します。ここでいう実行ユーザとは,GRANT文を実行したHADBユーザを意味しています。
GRANT文を実行したHADBユーザがスキーマを定義していない場合,またはスキーマ内に1つも実表を定義していない場合,アクセス権限を付与しないでGRANT文を正常終了します。
- メモ
-
ALL TABLESを指定した際に対象となる表は,GRANT文の実行時点で実行ユーザが所有している実表になります。したがって,GRANT文を実行したあとに,新たに定義した実表はALL TABLESの対象になりません(新たに定義した実表に対するアクセス権限は付与されません)。
- ●TO 権限受領者
-
権限受領者::={認可識別子〔,認可識別子〕…|PUBLIC}
アクセス権限を付与するHADBユーザを指定します。
- 認可識別子〔,認可識別子〕…:
-
アクセス権限を付与するHADBユーザの認可識別子を指定します。最大128個の認可識別子を指定できます。
認可識別子の指定規則を次に示します。
-
英小文字を指定する場合は,認可識別子を二重引用符(")で囲んで指定してください。二重引用符で囲まないと,英小文字を指定しても英大文字が指定されたと見なされます。
-
認可識別子は名前として指定するため,二重引用符(")で囲んで指定することを推奨します。
認可識別子の指定規則の詳細については,「6.1.4 名前の指定」を参照してください。
-
- PUBLIC:
-
指定したオブジェクトに対するアクセス権限を,全HADBユーザに許可する場合に指定します。ここでいう全HADBユーザとは,PUBLIC指定のGRANT文の実行後に作成されたHADBユーザも含まれます。
(例)
GRANT SELECT,IMPORT TABLE ON "T1" TO PUBLIC
上記のGRANT文を実行した場合,全HADBユーザに次のアクセス権限が許可されます。
-
表T1に対するSELECT権限
-
表T1に対するIMPORT TABLE権限
PUBLICを指定する場合は,GRANT文の実行者が,アクセス権限を許可するオブジェクトの所有者である必要があります。
- メモ
-
-
PUBLICキーワードは,すべてのHADBユーザを表す,システムによって暗黙的に作成されたユーザと考えることができます。
-
アクセス権限を許可するとは,アクセス権限を使用したアクセスまたは操作を許可するという意味です。
-
-
- ●WITH GRANT OPTION
-
権限受領者にアクセス権限を付与権付きで付与する場合にこのオプションを指定します。
なお,GRANT文の実行者は,付与するアクセス権限を付与権付きで持っている必要があります。
(例)
GRANT SELECT ON "X"."T1" TO "ADBUSER01" WITH GRANT OPTION
上記のGRANT文を実行した場合,表X.T1に対するSELECT権限が付与権付きでADBUSER01に付与されます。GRANT文を実行するHADBユーザは,表X.T1に対するSELECT権限を付与権付きで持っている必要があります。
(3) 実行時に必要な権限
アクセス権限を付与するGRANT文を実行する場合,次のすべての権限が必要になります。
-
CONNECT権限
-
スキーマ定義権限,または付与権付きのアクセス権限
(4) 規則
-
アクセス権限をほかのHADBユーザに付与するには,そのアクセス権限の付与権を持っている必要があります。
-
自分が所有しているオブジェクトへのアクセス権限を,自分自身に付与することはできません。
-
アクセス権限の付与権を持っている場合でも,次に示すHADBユーザにはアクセス権限を付与できません。
-
付与権付きのアクセス権限を自分に付与したHADBユーザ
-
上記のHADBユーザに,対象のアクセス権限を付与権付きで付与している延長上のHADBユーザ
-
自分自身(付与されたアクセス権限を自分に対して付与することはできません)
(例)
-
-
ビュー表に対するアクセス権限をほかのHADBユーザに付与するには,ビュー表の全基表に対するアクセス権限を付与権付きで持っている必要があります。
-
基表に対するアクセス権限が新たに付与された場合,その基表に依存するビュー表に対するアクセス権限も新たに付与されます(アクセス権限の伝搬が発生します)。例えば,HADBユーザAが,表X.T1を基表としたビュー表A.V1と,ビュー表A.V1を基表としたビュー表A.V2を定義している場合に,表X.T1に対するINSERT権限がHADBユーザAに付与されると,ビュー表A.V1,A.V2に対するINSERT権限も付与されます。
- メモ
-
-
アクセス権限の伝搬が発生するのは,アクセス権限を付与されたHADBユーザが定義したビュー表に限られます。
-
ビュー表が無効化されている場合,そのビュー表に対してはアクセス権限の伝搬は発生しません。
-
- 重要
-
基表が複数ある場合に,基表に対するアクセス権限が新たに付与されても,アクセス権限がビュー表に適用される条件を満たさないときは,ビュー表に対するアクセス権限は変更されません。
- (例)
-
HADBユーザAは,表X.T1と表X.T2に対するSELECT権限を持っていて,表X.T1と表X.T2を基表としたビュー表A.V1を定義しているとします。この場合,表X.T1に対するUPDATE権限が付与されても,ビュー表A.V1に対するUPDATE権限は付与されません。表X.T1と表X.T2の両方に対して,UPDATE権限が付与されないと,ビュー表A.V1に対するUPDATE権限は付与されません。このように,1つの基表に対してだけアクセス権限を付与しても,ビュー表に適用されるアクセス権限の条件を満たさない場合は,ビュー表に対するアクセス権限は変更されません。
-
ほかのHADBユーザに付与した付与権付きのアクセス権限から付与権だけを取り消す場合は,GRANT OPTION FORを指定したREVOKE文を実行してください。付与権付きのアクセス権限を付与したHADBユーザに対して,WITH GRANT OPTIONを指定しないでGRANT文を実行し,再度同じアクセス権限を付与しても,付与権を取り消すことはできません。
-
権限受領者に複数の認可識別子を指定した場合,GRANT文の実行でエラーが発生したときは,すべてのHADBユーザへの権限付与が無効になります。
-
HADBサーバに接続中のHADBユーザが持っているアクセス権限を変更した場合,次のタイミングで変更後のアクセス権限が有効になります。
-
そのHADBユーザが実行する次のトランザクション以降
-
(5) 例題
- 例題1
-
表T1に対するSELECT権限およびINSERT権限を,HADBユーザADBUSER01に付与します。
GRANT SELECT,INSERT ON "T1" TO "ADBUSER01"
- 例題2
-
表T1に対するすべてのアクセス権限を,HADBユーザADBUSER02とADBUSER03に付与します。
GRANT ALL PRIVILEGES ON "T1" TO "ADBUSER02","ADBUSER03"
- 例題3
-
表X.T1に対するSELECT権限を付与権付きで,HADBユーザADBUSER04に付与します。
GRANT SELECT ON "X"."T1" TO "ADBUSER04" WITH GRANT OPTION