2.7.5 アクセス権限
スキーマオブジェクトに対するアクセス制御を行う権限(アクセス権限)について説明します。
- 〈この項の構成〉
(1) アクセス権限とは
アクセス権限とは,次に示すスキーマオブジェクトにアクセスする際に必要となる権限のことです。
-
実表
-
ビュー表
スキーマオブジェクトのデータをSQL文で検索したり,スキーマオブジェクトをコマンドで操作したりするには,スキーマオブジェクトに対するアクセス権限が必要です。
自分(HADBサーバに接続中の認可識別子のHADBユーザ)が所有しているスキーマオブジェクトに対しては,自動的にアクセス権限を持ちます。そのため,自分が所有しているスキーマオブジェクトにはアクセスできます。
ほかのHADBユーザが所有しているスキーマオブジェクトに対しては,アクセス権限を通常は持っていないため,アクセスできません。ほかのHADBユーザが所有しているスキーマオブジェクトにアクセスするには,そのスキーマオブジェクトに対するアクセス権限を持っているHADBユーザから,アクセス権限を付与してもらう必要があります。
ほかのHADBユーザが所有しているスキーマオブジェクトにアクセスする場合の例を次の図に示します。
- [説明]
-
HADBユーザAは,表A.T1と表A.T2を所有しています。HADBユーザBは,表B.T3と表B.T4を所有しています。
HADBユーザAは,自分が所有している表A.T1と表A.T2に対するアクセス権限を持っているため,表A.T1と表A.T2にアクセスできますが,HADBユーザBが所有している表B.T3と表B.T4に対するアクセス権限を持っていません。そのため,表B.T3と表B.T4にはアクセスできません。HADBユーザAが,表B.T3と表B.T4にアクセスできるようにするには,表B.T3と表B.T4に対するアクセス権限をHADBユーザBに付与してもらう必要があります。
- メモ
-
HADBユーザは,アクセス権限を持っているスキーマオブジェクトに対してだけアクセスできます。
(2) アクセス権限の種類
アクセス権限には,次の表に示す種類があります。持っているアクセス権限の種類によって,スキーマオブジェクトに対して実行できる操作が変わります。
項番 |
アクセス権限の種類 |
説明 |
対象のスキーマオブジェクト |
---|---|---|---|
1 |
SELECT権限 |
SELECT権限とは,HADBユーザが,対象のスキーマオブジェクトのデータを参照するために必要となる権限です。 SELECT文およびCREATE VIEW文を実行する場合,そのスキーマオブジェクトに対するSELECT権限が必要になります。 |
|
2 |
INSERT権限 |
INSERT権限とは,HADBユーザが,対象のスキーマオブジェクトにデータを挿入するために必要となる権限です。 INSERT文を実行する場合,そのスキーマオブジェクトに対するINSERT権限が必要になります。 |
|
3 |
UPDATE権限 |
UPDATE権限とは,HADBユーザが,対象のスキーマオブジェクトのデータを変更するために必要となる権限です。 UPDATE文を実行する場合,そのスキーマオブジェクトに対するUPDATE権限が必要になります。 |
|
4 |
DELETE権限 |
DELETE権限とは,HADBユーザが,対象のスキーマオブジェクトのデータを削除するために必要となる権限です。 DELETE文を実行する場合,そのスキーマオブジェクトに対するDELETE権限が必要になります。 |
|
5 |
TRUNCATE権限 |
TRUNCATE権限とは,HADBユーザが,対象のスキーマオブジェクトのデータを一括で削除するために必要となる権限です。 TRUNCATE TABLE文およびPURGE CHUNK文を実行する場合,そのスキーマオブジェクトに対するTRUNCATE権限が必要になります。 |
実表 |
6 |
REFERENCES権限 |
REFERENCES権限とは,HADBユーザが,CREATE TABLE文で参照制約(外部キー)を定義する際に必要となる権限です。 外部キーを定義する場合,被参照表(主キーを定義している表)に対するREFERENCES権限が必要になります。 |
実表 |
7 |
IMPORT TABLE権限 |
IMPORT TABLE権限とは,HADBユーザが,対象のスキーマオブジェクトにデータをインポートするために必要となる権限です。 adbimportコマンドを実行する場合,そのスキーマオブジェクトに対するIMPORT TABLE権限が必要になります。 |
実表 |
8 |
REBUILD INDEX権限 |
REBUILD INDEX権限とは,HADBユーザが,対象のスキーマオブジェクトのインデクスを再作成するために必要となる権限です。 adbidxrebuildコマンドを実行する場合,そのスキーマオブジェクトに対するREBUILD INDEX権限が必要になります。 |
実表 |
9 |
GET COSTINFO権限 |
GET COSTINFO権限とは,HADBユーザが,対象のスキーマオブジェクトとそのスキーマオブジェクトのインデクスからコスト情報を収集したり,収集したコスト情報を削除したりするために必要となる権限です。 adbgetcstコマンドを実行する場合,そのスキーマオブジェクトに対するGET COSTINFO権限が必要になります。 |
実表 |
10 |
EXPORT TABLE権限 |
EXPORT TABLE権限とは,HADBユーザが,対象のスキーマオブジェクトのデータをエクスポートするために必要となる権限です。 adbexportコマンドを実行する場合,そのスキーマオブジェクトに対するEXPORT TABLE権限が必要になります。 |
|
11 |
MERGE CHUNK権限 |
MERGE CHUNK権限とは,HADBユーザが,対象のスキーマオブジェクトに対して作成された複数のチャンクを,1つのチャンクにマージするために必要となる権限です。 adbmergechunkコマンドを実行する場合,そのスキーマオブジェクトに対するMERGE CHUNK権限が必要になります。 |
実表 |
12 |
CHANGE CHUNK COMMENT権限 |
CHANGE CHUNK COMMENT権限とは,HADBユーザが,対象のスキーマオブジェクトに定義されたチャンクのコメントを設定・変更・削除するために必要となる権限です。 adbchgchunkcommentコマンドを実行する場合,そのスキーマオブジェクトに対するCHANGE CHUNK COMMENT権限が必要になります。 |
実表 |
13 |
CHANGE CHUNK STATUS権限 |
CHANGE CHUNK STATUS権限とは,HADBユーザが,対象のスキーマオブジェクトに定義されたチャンクの状態を変更するために必要となる権限です。 adbchgchunkstatusコマンドを実行する場合,そのスキーマオブジェクトに対するCHANGE CHUNK STATUS権限が必要になります。 |
実表 |
14 |
ARCHIVE CHUNK権限 |
ARCHIVE CHUNK権限とは,HADBユーザが,チャンクをアーカイブ状態にする際に必要となる権限です。 adbarchivechunkコマンドを実行する場合,対象のスキーマオブジェクトに対するARCHIVE CHUNK権限が必要です。 |
実表 |
15 |
UNARCHIVE CHUNK権限 |
UNARCHIVE CHUNK権限とは,HADBユーザが,チャンクのアーカイブ状態を解除する際に必要となる権限です。 adbunarchivechunkコマンドを実行する場合,対象のスキーマオブジェクトに対するUNARCHIVE CHUNK権限が必要です。 |
実表 |
- メモ
-
-
実表の所有者(実表を定義したHADBユーザ)は,所有している実表に対して,上記の表に示すすべての種類のアクセス権限を持っています。
-
ビュー表の所有者(ビュー表を定義したHADBユーザ)は,所有しているビュー表に対して,上記の表に示すすべての種類のアクセス権限を持っているわけではありません。どの種類のアクセス権限を持っているかは,ビュー表の所有者が基表に対して持っているアクセス権限によって決まります。詳細については,「2.7.6 ビュー表に対するアクセス権限」を参照してください。
-
(3) アクセス権限の付与
スキーマオブジェクトに対するアクセス権限をほかのHADBユーザに付与するには,そのスキーマオブジェクトに対するアクセス権限の付与権が必要になります。アクセス権限の付与権とは,スキーマオブジェクトに対するアクセス権限をほかのHADBユーザに付与できる権限のことです。
実表の所有者は,所有している実表に対するアクセス権限を付与権付きで持っています。ビュー表の所有者は,所有しているビュー表に対するアクセス権限を持っていますが,付与権を持っているかどうかは,基表に対して付与権付きのアクセス権限を持っているかどうかによって決まります。詳細については,「2.7.6 ビュー表に対するアクセス権限」を参照してください。
- 重要
-
アクセス権限を付与する際,アクセス権限だけを付与するか,アクセス権限と一緒にその付与権も付与するかを選択できます。
スキーマオブジェクトに対するアクセス権限の付与例を次の図に示します。
- [説明]
-
-
HADBユーザA
スキーマオブジェクト(表A.T1)の所有者です。表A.T1に対するアクセス権限を付与権付きで持っています。
-
HADBユーザB
表A.T1に対するアクセス権限を付与権付きで,HADBユーザAから付与されたHADBユーザです。表A.T1にアクセスでき,かつ表A.T1に対するアクセス権限をほかのHADBユーザに付与できます。
-
HADBユーザC
表A.T1に対するアクセス権限を付与権付きで,HADBユーザBから付与されたHADBユーザです。表A.T1にアクセスでき,かつ表A.T1に対するアクセス権限をほかのHADBユーザに付与できます。
-
HADBユーザD
表A.T1に対するアクセス権限(付与権なし)を,HADBユーザCから付与されたHADBユーザです。表A.T1にアクセスできます。HADBユーザDは,表A.T1に対するアクセス権限を付与権付きで持っていないため,表A.T1に対するアクセス権限をほかのHADBユーザに付与できません。
-
HADBユーザE
表A.T1に対するアクセス権限(付与権なし)を,HADBユーザCから付与されたHADBユーザです。表A.T1にアクセスできます。HADBユーザEは,表A.T1に対するアクセス権限を付与権付きで持っていないため,表A.T1に対するアクセス権限をほかのHADBユーザに付与できません。
ほかのHADBユーザにアクセス権限を付与するには,GRANT文を実行します。アクセス権限を付与権付きで付与する場合は,WITH GRANT OPTIONオプションを指定してGRANT文を実行します。
-
- 重要
-
上記の例の場合,HADBユーザB~HADBユーザEが持っている,表A.T1に対するアクセス権限は依存権限となります。
- ■依存権限とは
-
ほかのHADBユーザから付与されたアクセス権限のことを依存権限といいます。
(例)
-
HADBユーザAが持っている表A.T1に対するアクセス権限をP1とします。
-
HADBユーザBが持っている表A.T1に対するアクセス権限をP2とします。
-
HADBユーザCが持っている表A.T1に対するアクセス権限をP3とします。
-
HADBユーザDが持っている表A.T1に対するアクセス権限をP4とします。
-
HADBユーザEが持っている表A.T1に対するアクセス権限をP5とします。
この場合,アクセス権限P1の依存権限は,アクセス権限P2~P5になります。
アクセス権限P2の依存権限は,アクセス権限P3~P5になります。
アクセス権限P3の依存権限は,アクセス権限P4,P5になります。
アクセス権限P4とP5には,依存権限はありません。
依存権限は,自分に対してアクセス権限を付与したHADBユーザ(その延長上のHADBユーザも含む)が持っているアクセス権限が取り消された場合に影響を受けます。例えば,アクセス権限P2が取り消された場合,依存権限であるアクセス権限P3~P5も取り消されます。アクセス権限P3が取り消された場合,依存権限であるアクセス権限P4,P5も取り消されます。
-
- ■アクセス権限を付与できないHADBユーザ
-
アクセス権限の付与権を持っている場合でも,次に示すHADBユーザにはアクセス権限を付与できません。
-
付与権付きのアクセス権限を自分に付与したHADBユーザ
-
上記のHADBユーザに,対象のアクセス権限を付与権付きで付与している延長上のHADBユーザ
-
自分自身(付与されたアクセス権限を自分に対して付与することはできません)
(例)
-
(4) アクセス権限の取り消し
自分が付与したアクセス権限を取り消すことができます。ほかのHADBユーザが付与したアクセス権限を取り消すことはできません。
- 重要
-
-
取り消したアクセス権限に依存権限がある場合,依存権限も一緒に取り消されます。
-
付与権付きのアクセス権限を取り消すと,アクセス権限と一緒に付与権も取り消されます。
-
スキーマオブジェクトに対するアクセス権限の取り消し例を次の図に示します。
- [説明]
-
-
HADBユーザBが持っている表A.T1に対するアクセス権限を取り消す場合
このアクセス権限を取り消せるのは,HADBユーザAだけです。
HADBユーザBが持っている表A.T1に対するアクセス権限を取り消すと,その依存権限であるHADBユーザC,HADBユーザD,およびHADBユーザEが持っている,表A.T1に対するアクセス権限も取り消されます。
-
HADBユーザCが持っている表A.T1に対するアクセス権限を取り消す場合
このアクセス権限を取り消せるのは,HADBユーザBだけです。
HADBユーザCが持っている表A.T1に対するアクセス権限を取り消すと,その依存権限であるHADBユーザDとHADBユーザEが持っている,表A.T1に対するアクセス権限も取り消されます。
-
HADBユーザDが持っている表A.T1に対するアクセス権限を取り消す場合
このアクセス権限を取り消せるのは,HADBユーザCだけです。HADBユーザDが持っている表A.T1に対するアクセス権限には依存権限はありません。
-
HADBユーザEが持っている表A.T1に対するアクセス権限を取り消す場合
このアクセス権限を取り消せるのは,HADBユーザCだけです。HADBユーザEが持っている表A.T1に対するアクセス権限には依存権限はありません。
付与したアクセス権限を取り消すには,REVOKE文を実行します。
-
- メモ
-
-
スキーマオブジェクトの所有者(上記の例のHADBユーザA)が持っているスキーマオブジェクト(上記の例の表A.T1)に対するアクセス権限は取り消すことはできません。
-
上記の例の場合,HADBユーザAは,自分が付与したアクセス権限ではないため,HADBユーザCが持っている表A.T1に対するアクセス権限を取り消すことはできません。ただし,HADBユーザAは,HADBユーザBに付与した表A.T1に対するアクセス権限,またはその付与権を取り消すことによって,HADBユーザCが持っている表A.T1に対するアクセス権限も一緒に取り消すことができます。HADBユーザCが持っている表A.T1に対するアクセス権限は,HADBユーザBが持っている表A.T1に対するアクセス権限の依存権限であるため,一緒に取り消すことができます。
-
- ■アクセス権限の付与権だけを取り消す場合
-
アクセス権限の付与権だけを取り消すことができます。付与権だけを取り消した場合,その付与権を使用して付与したアクセス権限とその依存権限が取り消されます。
(例)
- [説明]
-
HADBユーザBが持っている表A.T1に対するアクセス権限の付与権を,HADBユーザAが取り消した場合,HADBユーザCが持っている表A.T1に対するアクセス権限が取り消されます。
また,HADBユーザDとHADBユーザEが持っている,表A.T1に対するアクセス権限も取り消されます(HADBユーザCが持っている表A.T1に対するアクセス権限の依存権限であるため)。
- ■同一のスキーマオブジェクトに対するアクセス権限を複数のHADBユーザから付与されている場合
-
次に示す例のように,HADBユーザBとHADBユーザCが,表A.T1に対するアクセス権限をHADBユーザDに付与した場合,HADBユーザDは,HADBユーザBから付与された表A.T1に対するアクセス権限と,HADBユーザCから付与された表A.T1に対するアクセス権限をそれぞれ持ちます。
(例)
例えば,HADBユーザDが持っている,HADBユーザBが付与した表A.T1に対するアクセス権限を取り消しても,HADBユーザCが付与した表A.T1に対するアクセス権限は取り消されません(自分が付与したアクセス権限しか取り消せないため)。HADBユーザDは,表A.T1に対するアクセス権限をまだ持っているため,表A.T1に対してアクセスできます。
(5) 複数のスキーマオブジェクトにアクセスする場合に必要となるアクセス権限
HADBユーザがSQL文を実行した場合に,SQL文の処理過程で複数のスキーマオブジェクトにアクセスするときは,それらすべてのスキーマオブジェクトに対するアクセス権限が必要となります。
対象のスキーマオブジェクトが実表の場合を例に,次で説明します。
- 複数の実表にアクセスするSQL文の実行例
-
SELECT * FROM "ADBUSER02"."T1", "ADBUSER02"."T2", "ADBUSER02"."T3"
- [説明]
-
HADBユーザ(ADBUSER01)が,ほかのHADBユーザ(ADBUSER02)が所有する実表T1,T2およびT3を検索する場合は,検索対象すべての実表に対してアクセス権限(SELECT権限)が必要になります。もし,HADBユーザ(ADBUSER01)が実表T3のアクセス権限(SELECT権限)を持っていない場合は,上記のSELECT文は実行できません。
これは,SELECT権限だけでなく,INSERT権限,UPDATE権限,DELETE権限など,ほかのアクセス権限でも同様です。