11.2.13 ビュー表を使用した運用例
次に示す運用条件を満たす場合の,ビュー表の定義方法とアクセス権限の付与方法について説明します。
- ■運用条件
-
-
顧客データが格納されている顧客表(CUSTOMERS)を定義し,顧客データをHADBユーザが参照できるようにする
-
顧客データを参照するHADBユーザが,顧客表の顧客名列(CUSTOMER_NAME)に格納されているデータを参照できないようにする
-
顧客データを参照するHADBユーザには,顧客表の表名(CUSTOMERS)を公開しないようにする
-
- ■この運用例で定義する表
-
-
顧客表(CUSTOMERS)
実際の顧客データが格納されている実表です。
-
顧客表のビュー表(V1_CUSTOMERS)
V1_CUSTOMERSは,CUSTOMERSを基表としたビュー表です。顧客表から顧客名列(CUSTOMER_NAME)を除いた表をビュー表として定義します。
-
顧客表のビュー表を基表としたビュー表(V2_CUSTOMERS)
V2_CUSTOMERSは,V1_CUSTOMERSを基表としたビュー表です。
顧客データを参照するHADBユーザには,V2_CUSTOMERSにアクセスさせます。
-
- ■この運用例で登場するHADBユーザ
-
-
HADBユーザADBUSER01:顧客表CUSTOMERS,ビュー表V1_CUSTOMERSの所有者
-
HADBユーザADBUSER02:ビュー表V2_CUSTOMERSの所有者
-
HADBユーザADBUSER03:顧客データを参照するHADBユーザ
-
HADBユーザADBUSER04:顧客データを参照するHADBユーザ
-
- ■運用の関連図
上記の運用条件を実現するには,次の手順で顧客表とビュー表を定義し,各表に対するアクセス権限を各HADBユーザに付与します。
手順
-
ADBUSER01が顧客表を定義する
CREATE TABLE "ADBUSER01"."CUSTOMERS"("CUSTOMER_ID" INTEGER, "CUSTOMER_NAME" CHAR(100), "REGISTERED_DATE" TIMESTAMP) IN "DBAREA01"
-
ADBUSER01が,顧客表に顧客データをインポートする
adbimportコマンドを実行して,顧客表に顧客データをインポートしてください。
-
ADBUSER01が,顧客表のビュー表V1_CUSTOMERSを定義する
CREATE VIEW "ADBUSER01"."V1_CUSTOMERS" AS SELECT "CUSTOMER_ID","REGISTERED_DATE" FROM "ADBUSER01"."CUSTOMERS"
顧客表からCUSTOMER_NAME列を除いた表が,ビュー表V1_CUSTOMERSとして定義されます。
-
ADBUSER01が,ビュー表V1_CUSTOMERSに対するSELECT権限を付与権付きでADBUSER02に付与する
GRANT SELECT ON "ADBUSER01"."V1_CUSTOMERS" TO "ADBUSER02" WITH GRANT OPTION
ビュー表V1_CUSTOMERSに対するSELECT権限が付与権付きでADBUSER02に付与されます。
- メモ
-
-
ビュー表V1_CUSTOMERSに対するSELECT権限の付与権をADBUSER02に付与するために,WITH GRANT OPTIONを指定しています。
-
手順の5.で,ADBUSER02が,ビュー表V1_CUSTOMERSを基表としたビュー表V2_CUSTOMERSを定義するために,ビュー表V1_CUSTOMERSに対するSELECT権限をADBUSER02に付与しています。
-
この例では,SELECT権限だけを付与していますが,必要に応じてほかの種類のアクセス権限も一緒に付与できます。
-
-
ADBUSER02が,ビュー表V2_CUSTOMERSを定義する
CREATE VIEW "ADBUSER02"."V2_CUSTOMERS" AS SELECT * FROM "ADBUSER01"."V1_CUSTOMERS"
ビュー表V1_CUSTOMERSを基表としたビュー表V2_CUSTOMERSが定義されます。
- メモ
-
-
CREATE VIEW文中の問合せ式中のSELECTに*が指定されていますが,CUSTOMER_NAME列を除いたV1_CUSTOMERSが基表のため,定義されたV2_CUSTOMERSもCUSTOMER_NAME列を除いたビュー表として定義されます。
-
ビュー表V2_CUSTOMERSの基表にビュー表V1_CUSTOMERSを指定することによって,実際に顧客データが格納されている顧客表の表名(CUSTOMERS)を隠すことができます。
-
-
ADBUSER02が,ビュー表V2_CUSTOMERSに対するSELECT権限をADBUSER03とADBUSER04に付与する
GRANT SELECT ON "ADBUSER02"."V2_CUSTOMERS" TO "ADBUSER03","ADBUSER04"
ADBUSER03とADBUSER04は,ビュー表V2_CUSTOMERSに対するSELECT権限を付与されたため,顧客データを参照できるようになります(ビュー表V2_CUSTOMERSを参照できるようになります)。
- メモ
-
ADBUSER03とADBUSER04は,顧客データを参照するだけのHADBユーザのため,ビュー表V2_CUSTOMERSに対するSELECT権限の付与権は付与しません。そのため,上記のGRANT文では,WITH GRANT OPTIONを指定していません。
上記の運用を継続中に,顧客データを参照するHADBユーザADBUSER05が追加された場合,ADBUSER02が,ビュー表V2_CUSTOMERSに対するSELECT権限をADBUSER05に付与してください。そうすると,ADBUSER05は,顧客データを参照できるようになります。
- メモ
-
-
この例の場合,顧客表中の顧客データを更新,追加,削除できるのは,ADBUSER01だけになります。
-
顧客データを参照するHADBユーザの管理(ビュー表V2_CUSTOMERSに対するアクセス権限の管理)は,ADBUSER02が実施します。
-
ADBUSER02~ADBUSER05は,顧客データを参照だけできます。また,CUSTOMER_NAME列を参照することはできません。
-