3.34.2 REVOKE アクセス権限(アクセス権限削除)
(1) 機能
ユーザに与えている表のアクセス権限を取り消します。
(2) 使用権限
- 表の所有者
-
GRANT(アクセス権限定義)で与えたアクセス権限を取り消すことができます。
(3) 形式
REVOKE {アクセス権限〔,アクセス権限〕…|ALL〔PRIVILEGES〕} ON 〔認可識別子.〕表識別子 FROM{認可識別子〔,認可識別子〕…|PUBLIC} 〔WITH PROGRAM〕 アクセス権限::={SELECT|INSERT|DELETE|UPDATE}
(4) オペランド
(a) {アクセス権限〔,アクセス権限〕…|ALL〔PRIVILEGES〕}
- アクセス権限
-
アクセス権限を取り消す場合に指定します。なお,同じアクセス権限は指定できません。
- ALL〔PRIVILEGES〕
-
指定した表に対して,アクセス権限で指定できるすべてのアクセス権限を取り消す場合に指定します。
(b) アクセス権限::={SELECT|INSERT|DELETE|UPDATE}
- SELECT
-
SELECT権限を取り消す場合に指定します。
- INSERT
-
INSERT権限を取り消す場合に指定します。
- DELETE
-
DELETE権限を取り消す場合に指定します。
- UPDATE
-
UPDATE権限を取り消す場合に指定します。
(c) ON〔認可識別子.〕表識別子
- 認可識別子
-
アクセス権限を取り消す表の所有者の認可識別子を指定します。
パブリックビューのアクセス権限を取り消す場合は,認可識別子にPUBLICを指定してください。
- 表識別子
-
アクセス権限を取り消す表の名前を指定します。
(d) FROM{認可識別子〔,認可識別子〕…|PUBLIC}〔WITH PROGRAM〕
- 認可識別子
-
アクセス権限を取り消すユーザの認可識別子を指定します。ユーザの認可識別子は,最大1,600個指定できます。ただし,同じ認可識別子は指定できません。
- PUBLIC
-
GRANTのPUBLIC指定で与えたアクセス権限を取り消す場合に指定します。
- WITH PROGRAM
-
ビュー表の基になる表のSELECT権限を取り消すときに,SELECT権限の取消によって削除されるビュー表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。
(5) 共通規則
-
自分自身の持っているアクセス権限を取り消すことはできません。
-
与えていない権限,又は既に取り消した権限を再度取り消すこともできます。
-
GRANTのPUBLICで与えた権限は,REVOKEのPUBLICで取り消してください。
PUBLICを指定して権限が与えられている場合,特定のユーザのアクセスを許さないようにするためには,PUBLICを指定して権限を削除し,認可識別子を指定して必要なユーザに対して権限を与え直してください。
-
表の所有者が他人に与えたSELECT権限を取り消した場合,その他人がその表を利用して定義したビュー表は削除されます。
-
ビュー定義で使用した表に対するアクセス権限,又はビュー表の基の表に対するアクセス権限を,ビュー表所有者から取り消す場合の規則を次に示します。
<ビュー表V1の定義>
CREATE VIEW V1※1(VSCODE,VSNAME,VTANKA) AS SELECT SCODE,SNAME,TANKA FROM ZAIKO※2 WHERE SCODE = (SELECT SCODE FROM JUTYU※3)
<ビュー表V2の定義>
CREATE VIEW V2※4(VSSCODE,VSNYUKOBI) AS SELECT SCODE,NYUKOBI FROM NYUKO※5
<ビュー表V1からのビュー表VV1の定義>
CREATE VIEW VV1※6(VVSCODE,VVTANKA) AS SELECT VSCODE,VTANKA FROM V1※1 WHERE SCODE = (SELECT VSSCODE FROM V2※4 WHERE VSNYUKOBI > DATE('1995-09-21'))
-
ビュー表所有者からビュー定義で使用した表(※2,※3,※5)に対するSELECT権限を取り消す場合,そのビュー表(※1,※4),及びそのビュー表を使用して定義するビュー表(※6)も削除されます。
(例1)
ビュー表所有者からJUTYU(※3)に対するSELECT権限を取り消す場合,V1(※1)及びVV1(※6)が削除されます。
(例2)
ビュー表所有者からNYUKO(※5)に対するSELECT権限を取り消す場合,V2(※4),及びVV1(※6)が削除されます。
-
ビュー表所有者からビュー表の基になる表(※2,※5)に対するアクセス権限を取り消す場合,そのビュー表(※1,※4),及びそのビュー表を基に定義するビュー表(※6)に対するアクセス権限も取り消されます。なお,ここでいうアクセス権限とは,SELECT権限を除いた権限です。
(例1)
ビュー表所有者からZAIKO(※2)に対するアクセス権限を取り消す場合,V1(※1),及びVV1(※6)に対するアクセス権限も削除されます。
(例2)
ビュー表所有者からNYUKO(※5)に対するアクセス権限を取り消す場合,V2(※4)に対するアクセス権限も削除されます。
取り消されたアクセス権限を再度与えるには,取り消したビュー表の基になる表に対するアクセス権限をビュー表所有者に再度与えて,そのビュー表を削除してからビュー表を再度定義してください。
(例1)の場合,ZAIKO(※2)に対するアクセス権限をビュー表所有者に与えて,V1(※1)を削除してから(V1を削除するとVV1も削除されます),V1(※1),VV1(※6)の順で再度定義します。
(例2)の場合,NYUKO(※5)に対するアクセス権限をビュー表所有者に与えて,V2(※4)を削除してからV2(※4)を再度定義します。
-
-
WITH PROGRAMを省略した場合,SELECT権限の取り消しによって削除される,ビュー表を使用する手続き及びトリガの有効なSQLオブジェクトがあると,その権限は削除できません。
-
実行中のSQLオブジェクトが無効になる場合,Java手続き中からREVOKEは実行できません。
-
一時表に対するアクセス権限を取り消す場合,指定できるのはALL 〔PRIVILEDGE〕だけです。
-
監査証跡表に対する副監査人のアクセス権を取り消すことはできません。
(6) 留意事項
-
PUBLICに対して与えた権限,又は特定ユーザに与えた権限の取り消しについては,組み合わせによって結果が異なります。組み合わせを次の図に示します。
図3‒1 PUBLICに与えた権限,又は特定ユーザに与えた権限の取り消し -
REVOKEは,OLTP下のX/Openに従ったUAPから指定できません。
-
WITH PROGRAMを指定して手続き,及びトリガの有効なSQLオブジェクトを無効にした場合,ディクショナリ表SQL_ROUTINE_RESOURCES中の無効となった手続き,及びトリガの情報は削除されます。
-
WITH PROGRAMを指定して無効にした手続き,及びトリガのSQLオブジェクトを実行するためには,ALTER ROUTINE,ALTER PROCEDURE,又はALTER TRIGGERを実行して手続き,及びトリガの有効なSQLオブジェクトを再作成しておく必要があります。
(7) 使用例
-
ユーザ(認可識別子:USER1)に与えた在庫表(ZAIKO)を検索する権限 (SELECT権限)を取り消します。
REVOKE SELECT ON ZAIKO FROM USER1
-
すべてのユーザに対して与えた在庫表(ZAIKO)をアクセスするすべての権限の中で,DELETE権限だけを取り消します。
REVOKE DELETE ON ZAIKO FROM PUBLIC