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