プライマリ・コンテンツに移動
Oracle® Database SecureFilesおよびラージ・オブジェクト開発者ガイド
12cリリース1 (12.1)
B71284-05
目次へ移動
目次
索引へ移動
索引

前
次

6 DBFS SecureFilesストア

DBFS SecureFilesストアを設定および使用するための特定の手順があります。

ここでは、次の項目について説明します。

SecureFilesストアの設定

SecureFilesストアの設定にはいくつかの側面があります。

この項では、SecureFilesストアの設定方法について説明します。

ここでは、次の項目について説明します。

権限の管理について

操作のためのコンテンツAPIおよびストアへのアクセスでは、標準のデータベース・ユーザーを使用する必要があります。

SYSまたはSYSTEMユーザーやSYSDBAまたはSYSOPERシステム権限は使用しないでください。セキュリティおよび義務の分離を強化するために、DBFSコンテンツAPIの操作を管理する機能の使用を許可するのは、信頼できる特定のユーザーに対してのみにしてください。

各ユーザーにDBFS_ROLEロールを付与する必要があります。そうでない場合、DBFSコンテンツAPIを使用する権限がユーザーに付与されません。適切な管理権限(SYSDBA)を持つユーザーが、必要に応じて追加のユーザーにロールを付与できます。

データベースでのロール、アクセス制御および定義者/実行者権限の相互作用に応じて、DBFSコンテンツAPIタイプ(DBMS_DBFS_CONTENT_ xxx接頭辞を持つSQLタイプ)およびパッケージ(通常はDBMS_DBFS_CONTENTおよびDBMS_DBFS_SFSのみ)の各種の権限(通常は実行権限)を、本来DBFS_ROLEロールを持つユーザーに明示的に付与することが必要な場合があります。

これらの明示的および直接的な付与は、一般的な必要とされる処理であり、必要またはリクエストに応じて行われます。

権限の作成または設定

DBFSコンテンツAPIを使用する必要があるユーザーには、DBFS_ROLEロールを付与する必要があります。

  1. DBFSコンテンツAPIターゲット・ユーザーを作成または決定します。

    この例では、ユーザーとパスワードとしてsfs_demo/passwordを使用します

    このデータベース・ユーザーは、少なくともCREATE SESSIONCREATE RESOURCEおよびCREATE VIEW権限を持つ必要があります。

  2. DBFS_ROLEロールをこのユーザーに付与します。
    CONNECT / as sysdba
    GRANT dbfs_role TO sfs_demo;
    

これにより、DBFS_ROLEロールを持つデータベース・ユーザー用にDBFSコンテンツAPIが設定されます。

SecureFilesファイルシステム・ストアの作成

DBFSコンテンツAPIがアクセスするSecureFilesファイルシステム・ストアを作成する必要があります。

CREATEFILESYSTEMプロシージャは、実行の前後に自動コミットします(DDLに類似)。メソッドCREATESTORECREATEFILESYSTEMのラッパーです。

DBMS_DBFS_SFS構文の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SecureFilesファイルシステム・ストアの作成手順:

  1. DBFSコンテンツAPIを使用してアクセスが必要なストアを作成します。
    DECLARE
      BEGIN
        DBMS_DBFS_SFS.CREATEFILESYSTEM(
          store_name => 'FS1',
          tbl_name => 'T1',
          tbl_tbs => null,
          use_bf => false 
        );
        COMMIT;
      END;
    /
    

    条件:

    • store_nameは、任意のユーザー固有の名前です。

    • tbl_nameは、現在のスキーマで作成された有効な表名です。

    • tbl_tbsは、索引、LOBまたはネストした表などのストア表および依存セグメントに使用される有効な表領域の名前です。デフォルトはNULLで、現在のスキーマの表領域を指定します。

    • use_bfは、trueであればBasicFiles LOBの使用を指定し、falseであれば使用しないことを指定します。

  2. このストアを、SecureFilesストアで管理される新規ストアとしてDBFSコンテンツAPIに登録します。
    CONNECT sfs_demo
    Enter password:password
    DECLARE
      BEGIN
        DBMS_DBFS_CONTENT.REGISTERSTORE(
          store_name    => 'FS1',
          provider_name => 'anything',
          provider_package => 'dbms_dbfs_sfs'
        );
        COMMIT;
      END;
    /
    

    条件:

    • store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

    • provider_nameは無視されます。

    • provider_packageDBMS_DBFS_SFSで、SecureFilesストアの参照プロバイダ用です。

    この操作では、SecureFilesストアFS1DBMS_DBFS_SFSプロバイダが関連付けられます。

  3. 適切なマウント・ポイントにストアをマウントします。
    CONNECT sfs_demo
    Enter password: password
    DECLARE
      BEGIN
        DBMS_DBFS_CONTENT.MOUNTSTORE(
          store_name    => 'FS1',
          store_mount   => 'mnt1'
        );
        COMMIT;
      END;
    /
    

    条件:

  4. (オプション)前述の手順の結果を確認するには、次の文を使用します。
    • SecureFilesストア表およびファイルシステムを確認する場合

      SELECT * FROM TABLE(DBMS_DBFS_SFS.LISTTABLES);
      SELECT * FROM TABLE(DBMS_DBFS_SFS.LISTFILESYSTEMS);
      
    • ContentAPIストアおよびマウントを確認する場合

      SELECT * FROM TABLE(DBMS_DBFS_CONTENT.LISTSTORES);
      SELECT * FROM TABLE(DBMS_DBFS_CONTENT.LISTMOUNTS);
       
    • SecureFilesストア機能を確認する場合

      var fs1f number;
      exec :fs1f := dbms_dbfs_content.getFeaturesByName('FS1');
      select * from table(dbms_dbfs_content.decodeFeatures(:fs1f)); 
      
    • リソースおよびプロパティ・ビューを確認する場合

      SELECT * FROM DBFS_CONTENT;
      SELECT * FROM DBFS_CONTENT_PROPERTIES;
      

SecureFilesシステム・ストア・データを保持する表へのアクセス

DBMS_DBFS_SFSパッケージ・メソッドを使用する場合でも、SecureFilesストア・ファイルシステムのデータを保持する表には直接アクセスしないでください。

ファイルシステムにアクセスする正しい方法は、次のとおりです。

  • 手順を実行する場合: DBFSコンテンツAPI (DBMS_DBFS_CONTENTメソッド)を使用します。

  • SQL操作の場合: リソースとプロパティのビュー(DBFS_CONTENTおよびDBFS_CONTENT_PROPERTIES)を使用します。

SecureFilesストア・ファイルシステムの初期化

SecureFilesストアに関連付けられた表を切り捨てたり再初期化することができます。

  • プロシージャINITFS()を使用します。

    プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。

次の例では、SecureFilesストアstore_nameに関連付けられたファイルシステムFS1および表SFS_DEMO.T1を使用しています。

CONNECT sfs_demo;
Enter password: password
EXEC DBMS_DBFS_SFS.INITFS(store_name => 'FS1');

SecureFiles LOBとBasicFiles LOBの比較

SecureFiles LOBは、Oracle Database 11gリリース1以上でのみ使用できます。それより前のリリースでは使用できません。

自動セグメント領域管理(ASSM)で管理されていない表領域のLOB記憶域には、BasicFiles LOB記憶域を使用する必要があります。

SecureFiles LOBを使用するには、11.1.0.0以上の互換性が必要です。

また、DBMS_DBFS_SFS.CREATEFILESYSTEMで次の情報を指定する必要があります。

  • SecureFiles LOB (デフォルト)を使用するには、use_bf => falseを指定します。

  • BasicFiles LOBを使用するには、use_bf => trueを指定します。

SecureFilesストア・ファイルシステムの使用

DBFSコンテンツAPIには、SecureFilesストア・ファイルシステムに移入したり、あるいはファイルシステムを管理するためのメソッドが用意されています。

ここでは、次の項目について説明します。

DBFSコンテンツAPIの操作の例

SecureFilesストア・ファイルシステムに移入するための新しいファイルおよびディレクトリ要素を作成できます。

SecureFilesストアの設定の手順を実行して、DBFSコンテンツAPI権限を設定し、少なくとも1つのSecureFilesストア参照ファイルシステムを作成し、マウント・ポイント/mnt1の下にマウントした場合、例6-1のようにして新しいファイルおよびディレクトリ要素を作成できます。

例6-1 DBFSコンテンツAPIの操作

CONNECT tjones
Enter password: password
 
DECLARE
   ret integer;
   b   blob;
   str varchar2(1000)  := '' || chr(10) ||
 
'#include <stdio.h>' || chr(10) ||
'' || chr(10) ||
'int main(int argc, char** argv)' || chr(10) ||
'{' || chr(10) ||
'    (void) printf("hello world\n");' || chr(10) ||
'    RETURN 0;' || chr(10) ||
'}' || chr(10) ||
'';
 
    BEGIN
        ret := dbms_fuse.fs_mkdir('/mnt1/FS1');
        ret := dbms_fuse.fs_creat('/mnt1/FS1/hello.c', content => b);
        dbms_lob.writeappend(b, length(str), utl_raw.cast_to_raw(str));
        COMMIT;
    END;
    /
    SHOW ERRORS;
 
    -- verify newly created directory and file
    SELECT pathname, pathtype, length(filedata),
        utl_raw.cast_to_varchar2(filedata)
        FROM dbfs_content
            WHERE pathname LIKE '/mnt1/FS1%'
            ORDER BY pathname;

ファイルシステムは、DBMS_DBFS_CONTENTを使用してPL/SQLから移入およびアクセスできます。ファイルシステムは、dbfs_contentおよびdbfs_content_propertiesビューを使用してSQLから読取り専用でアクセスできます。

また、ファイルシステムは、FUSEを使用してマウントされているときは通常のファイルシステムAPIおよびUNIXユーティリティで、またはスタンドアロンのdbfs_clientツール(FUSEが使用不可または設定されていない環境)によって、移入およびアクセスできます。

SecureFilesストア・ファイルシステムの削除

unmountStoreメソッドを使用して、SecureFilesストア・ファイルシステムを削除できます。

このメソッドにより、ファイルシステムを参照するすべてのストアがメタデータ表から削除され、基礎となるファイルシステム表が削除されます。プロシージャの実行は、DDLに類似しています(実行の前後に自動コミット)。

  1. ストアをアンマウントします。
    CONNECT sfs_demo
    Enter password: password
    DECLARE
      BEGIN
        DBMS_DBFS_CONTENT.UNMOUNTSTORE(
          store_name    => 'FS1',
          store_mount   => 'mntl';
        );
        COMMIT;
    END;
    /
    

    条件:

    • store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

    • store_mountはマウント・ポイントです。

  2. ストアを登録解除します。
    CONNECT sfs_demo
    Enter password: password
    EXEC DBMS_DBFS_CONTENT.UNREGISTERSTORE(store_name => 'FS1');
    COMMIT;
    

    store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

  3. ファイルシステムを削除します。
    CONNECT sfs_demo/******;
    EXEC DBMS_DBFS_SFS.DROPFILESYSTEM(store_name => 'FS1');
    COMMIT;
    

    store_nameは、表SFS_DEMO.T1を使用するSecureFilesストアFS1です。

DBFS SecureFilesストア・パッケージDBMS_DBFS_SFSについて

DBFS SecureFilesストア・パッケージ(DBMS_DBFS_SFS)は、DBMSコンテンツのSecureFiles LOB記憶域をサポートするDBMS_DBFS_CONTENTのストア・プロバイダです。

DBMS_DBFS_SFSパッケージを使用するには、DBFS_ROLEロールが付与されている必要があります。

SecureFilesストア・プロバイダは、DBFSコンテンツAPIのデフォルトの実装(また、プロバイダSPIに準拠するストア・プロバイダの標準的な例)であり、スキーマ内の列としてLOBをすでに使用しているアプリケーションがBLOB列にアクセスできるようにするためのものです。これにより既存のアプリケーションは容易にPL/SQLプロバイダ実装を追加して、スキーマやビジネス・ロジックを変更することなくDBFSコンテンツAPIを通じてアクセスできます。

さらに、標準DBFSコンテンツAPIインタフェースを介して、別の(サード・パーティの)ストアに格納されたコンテンツをアプリケーションで読取りおよび書込みできます。DBMS_DBFS_CONTENT_SPIに定義されているプロバイダSPIの詳細は、「独自のDBFSストアの作成」および『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SecureFilesストアでは、基礎となるユーザー・データはSecureFiles LOBに格納され、パス名、IDおよびプロパティなどのメタデータはリレーショナル表内の列として格納されます。SecureFiles LOBの拡張機能の詳細は、SecureFiles LOB記憶域を参照してください。

DBMS_DBFS_SFSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。