3.12 Workspace ManagerおよびLabel SecurityでのGeoRasterの使用

Oracle Workspace Managerでは、GeoRasterオブジェクトのラスター・ブロックのためのバージョニング機能が提供されます。Oracle Label Securityでは、ラスター・ブロックの行レベルの拡張セキュリティを使用するGeoRasterオブジェクトがサポートされます。

GeoRasterをOracle Workspace ManagerまたはOracle Label Securityと組み合せて使用するには、GeoRasterオブジェクトのリレーショナル表としてラスター・データ表(RDT)を作成する必要があります(例3-3を参照)。ベース・リレーショナルRDTでSDO_RASTER型のオブジェクト・ビューを定義する必要はありません。

3.12.1 Workspace ManagerでのGeoRasterの使用

Workspace Managerでは、異なる作業領域にラスター・データの異なるバージョンを保存して変更を加えることで、ラスター・データに対する変更を容易に管理できます。Workspace ManagerでGeoRasterを使用するには、ラスター記憶域用のリレーショナル・ラスター・データ表を使用し、それらのリレーショナル・ラスター・データ表をバージョン対応にする必要があります。たとえば (一般的な形式):

EXECUTE DBMS_WM.EnableVersioning (<rdt_relational_table>, 'VIEW_WO_OVERWRITE');

ノート:

バージョン対応にできるのは、ラスター・データ表のみです。GeoRasterオブジェクトが格納されているGeoRaster表は、バージョン対応にしないでください。また、作業領域での作業中にGeoRaster表を変更する必要のある操作は実行しないでください。

リレーショナルRDTをバージョン対応にした後に、DBMS_WMパッケージのサブプログラムを使用してラスター・データの変更を管理できます。ラスター・ブロックを直接変更する必要がある場合は、次の例に示すとおり、操作の前にDBMS_WM.copyForUpdateプロシージャをコールします。

declare
  geor sdo_georaster;
  cond varchar2(1000);
  lb   blob;
  r1   raw(1024);
  amt  number;
begin
  r1 := utl_raw.copies(utl_raw.cast_to_raw('0'),1024);
 
  select georaster into geor from georaster_table where georid=1;
  cond := 'rasterId=' || geor.rasterId || ' AND pyramidLevel=0 AND ' ||
          ' bandBlockNumber=0 AND rowBlockNumber=0 AND columnBlockNumber=0';
  dbms_wm.copyForUpdate(geor.rasterDataTable, cond);
  sdo_geor.getRasterBlockLocator(geor, 0, 0, 0, 0, lb, null, 'TRUE');
  amt := 1024;
  dbms_lob.write(lb, amt, 1, r1);
end;
/

ただし、GeoRasterサブプログラムを使用してラスター・データを変更する場合は、事前にDBMS_WM.copyForUpdateプロシージャをコールする必要はありません

Workspace Managerの詳細は、『Oracle Database Workspace Manager開発者ガイド』を参照してください。

3.12.2 Label SecurityでのGeoRasterの使用

Oracle Label Securityでは、ユーザーのセキュリティ・クリアランスのレベルに基づいて、機密データに対する行レベルのアクセス制御を実現できます。Label SecurityでGeoRasterを使用するには、次の基本ステップを実行します。

  1. GeoRaster表および1つ以上のリレーショナルRDTを作成します。
  2. Oracle Label Securityポリシーを作成してラベル・コンポーネントを定義します。
  3. GeoRaster表と1つ以上のリレーショナルRDTに対してラベル付けファンクションを作成します。

    GeoRaster表の行のラベルは、アプリケーションの要求に従って生成される必要があります。GeoRasterオブジェクトを格納する行と、関連するRDTのGeoRasterオブジェクトのラスター行には、両方とも同じラベルを使用してください。異なるラベルを使用すると、GeoRasterオブジェクトが無効になるか、一貫性のないステータスになる可能性があります。

    次の例では、リレーショナルRDTに対してラベル付けファンクションを作成します。

    CREATE OR REPLACE FUNCTION gen_rdt_label(rdt_name varchar2, rid number)
      RETURN LBACSYS.LBAC_LABEL
    AS
      tabname varchar2(80);
      schema  varchar2(32);
      grcol   varchar2(1024);
      colname varchar2(30);
      label   NUMBER;
    BEGIN
      EXECUTE IMMEDIATE
       'SELECT v.owner, v.table_name, v.column_name grcol, p.column_name ' ||
       '  FROM all_sdo_geor_sysdata v, all_sa_policies p, all_sa_table_policies t '
       || ' WHERE v.rdt_table_name=:1 AND v.raster_id=:2 AND ' ||
       ' v.owner=t.schema_name AND v.table_name=t.table_name AND ' ||
       ' p.policy_name=t.policy_name ' 
       INTO schema, tabname, grcol, colname
       USING upper(rdt_name), rid;
      EXECUTE IMMEDIATE
        'SELECT t.' || colname  ||
         ' FROM ' || schema || '.' || tabname || ' t ' ||
         ' WHERE t.' || grcol || '.rasterdatatable=:1 AND ' ||
         '       t.' || grcol || '.rasterid=:2' 
        INTO label
        USING upper(rdt_name), rid;
      RETURN LBACSYS.LBAC_LABEL.NEW_LBAC_LABEL(label);
    END;
    /
    
  4. Label SecurityポリシーをGeoRaster表とそれに関連する1つ以上のRDTに適用します。

    次の一般的な形式の例では、前述のステップにおけるラベル付けファンクションの例を使用して、Label Securityポリシーを1つのRDTに適用します。

    BEGIN
      SA_POLICY_ADMIN.REMOVE_TABLE_POLICY(<policy_name>,<schema_name>,<rdt_relational_table>);
      SA_POLICY_ADMIN.APPLY_TABLE_POLICY(
        POLICY_NAME => <policy_name>,
        SCHEMA_NAME => <schema_name>,
        TABLE_NAME  => <rdt_relational_table>,
        TABLE_OPTIONS => 'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL',
        LABEL_FUNCTION => '<schema_name>.gen_rdt_label(<rdt_relational_table>,:new.rasterid)',
        PREDICATE => NULL);
    END;
    /
    
  5. ユーザーを作成して認可を行い、Label Securityに関連する他の管理タスクを完了します。

ポリシーを表に適用する前または後に、GeoRasterデータをロードできます。

ALL_SDO_GEOR_SYSDATAビュー(「GeoRasterシステム・データ・ビュー(xxx_SDO_GEOR_SYSDATA)」を参照)には、現行ユーザーがアクセス可能なすべてのGeoRasterオブジェクトに関するシステム・データが含まれます。この場合のアクセス可能性は、任意アクセス制御(DAC)のコンテキストで定義されたユーザーの権限によって決定されます。

GeoRaster表の行のラベルが更新されたら、各ラベルが同期するように、RDTの関連するデータ・ラベルも更新される必要があります。

Label Securityの詳細は、『Oracle Label Security管理者ガイド』を参照してください。