5.1 DIRECTORYオブジェクト
BFILE
ロケータは、BFILENAME(DIRECTORY, FILENAME)
関数を使用して初期化されます。この項では、DIRECTORY
オブジェクトの初期化方法について説明します。
ディレクトリ・オブジェクトには、アクセスするファイルがあるデータベース・サーバー・ファイル・システム上の物理ディレクトリの論理的な別名を指定します。サーバー・ファイル・システム内のファイルにアクセスできるのは、
DIRECTORY
オブジェクトに対する必要なアクセス権限を持っている場合のみです。Oracle Enterprise Manager Cloud Controlを使用してDIRECTORY
オブジェクトを管理することもできます。
ディレクトリ・オブジェクトを使用すると、ファイルの位置を柔軟に扱えるようになり、アプリケーション内の物理ファイルの絶対パス名をハードコードしなくてもすみます。
DIRECTORY
オブジェクト名は、BFILE
ロケータの初期化の際に、BFILENAME
関数(SQLおよびPL/SQL)またはOCILobFileSetName()
関数(OCI)と組み合せて使用されます。
- DIRECTORY名の指定
ディレクトリを作成するには、CREATE ANY DIRECTORY
システム権限が必要です。 - ディレクトリ・オブジェクトのセキュリティ
この項では、DIRECTORY
オブジェクトのセキュリティについて説明します。
関連項目:
-
『Oracle Database SQL言語リファレンス』の
CREATE
DIRECTORY
に関する項 -
Oracle Enterprise Manager Cloud Controlの詳細は、『Oracle Database管理者ガイド』を参照してください
親トピック: BFILE
5.1.1 ディレクトリ名の指定
ディレクトリを作成するには、CREATE ANY DIRECTORY
システム権限が必要です。
ディレクトリ・オブジェクトのネーミング規則は、表および索引のネーミング規則と同じです。つまり、通常の識別子は大文字で解釈されますが、デリミタ付き識別子はそのまま解釈されます。たとえば、次のような文があるとします。
CREATE OR REPLACE DIRECTORY scott_dir AS '/usr/home/scott';
この文は、「SCOTT_DIR
」という名前(大文字)のディレクトリ・オブジェクトを作成または再定義します。ただし、次の文のように、
ディレクトリ名にデリミタ付き識別子が使用されるとします。
CREATE DIRECTORY "Mary_Dir" AS '/usr/home/mary';
DIRECTORY
ディレクトリ・オブジェクトの名前は'Mary_Dir
'になります。BFILENAME
をコールするときは、「SCOTT_DIR
」および「Mary_Dir
」を使用します。たとえば:
BFILENAME('SCOTT_DIR', 'afile') BFILENAME('Mary_Dir', 'afile')
警告:
データベースは、指定したディレクトリおよびパス名が実際に存在するかどうかは検証しません。ご使用のオペレーティング・システムで有効なディレクトリ名を指定してください。大文字と小文字が区別されるパス名がオペレーティング・システムで使用される場合は、ディレクトリ名を正しい形式で指定してください。最後のスラッシュを指定する必要はありません(たとえば、/tmp/
ではなく、/tmp
でもかまいません)。
ディレクトリ指定では、パス内の任意の場所に".."を含めることはできません(たとえば: ../../abc/def
、abc/../def
、abc/def/hij..
)。
Windowsプラットフォームの場合
Windowsプラットフォーム上では、ディレクトリ名の大/小文字が区別されません。したがって、次の2つの文は同じディレクトリを表します。
CREATE DIRECTORY "big_cap_dir" AS "g:\data\source"; CREATE DIRECTORY "small_cap_dir" AS "G:\DATA\SOURCE";
親トピック: DIRECTORYオブジェクト
5.1.2 ディレクトリ・オブジェクトのセキュリティ
この項では、DIRECTORY
オブジェクトのセキュリティについて説明します。
DIRECTORY
オブジェクト・モデルには、次の2つの異なるレベルのセキュリティがあります。
- SQL DDL:
DIRECTORY
オブジェクトのCREATE
またはDROP
- SQL DML:
DIRECTORY
オブジェクトに対するREAD
システム権限およびオブジェクト権限
DBA権限: CREATE / DROP DIRECTORY
ディレクトリ・オブジェクトは、システム所有のオブジェクトです。Oracle Databaseでは、DBAにのみ付与される次のシステム権限がサポートされています。
-
CREATE
ANY
DIRECTORY
:ディレクトリ・オブジェクトの作成または変更用
-
DROP
ANY
DIRECTORY
:ディレクトリ・オブジェクトの削除用
警告:
CREATE
ANY
DIRECTORY
権限およびDROP
ANY
DIRECTORY
権限によって、サーバーのファイル・システムがすべてのデータベース・ユーザーに公開される可能性があるため、DBAは、セキュリティ違反を防止するため、一般のデータベース・ユーザーに対するこれらの権限の付与は慎重に行う必要があります。
ユーザー権限: ディレクトリに対するREAD権限
ディレクトリ・オブジェクトに対する
READ
権限によって、そのディレクトリ下に置かれたファイルを読み取ることができます。ディレクトリ・オブジェクトの作成者には、
READ
権限が自動的に付与されます。
GRANT
オプション付きのREAD
権限を付与されている場合は、その権限を他のユーザーやロールに付与して、自分の権限ドメインに追加することもできます。
ノート:
READ
権限は、個々のファイルではなく
ディレクトリ・オブジェクトのみに定義されます。したがって、同じディレクトリ内のファイルに異なる権限を割り当てることはできません。
表される物理ディレクトリは、Oracleサーバー・プロセスに必要な、対応するオペレーティング・システム権限(この場合は読取り権限)が含まれていない場合もあります。
DBAは、次のことを確認する必要があります。
- 物理ディレクトリの存在
- ファイル、ディレクトリ、ディレクトリへのパスで、Oracleサーバー・プロセスに対する読取り権限が有効であること
- データベース・ユーザーがファイルにアクセスする間は終始、ディレクトリが使用可能な状態であり、読取り権限も有効であること
ここでの権限とは、単にOracleサーバーがそのディレクトリ内のファイルを読むことができるということです。これらの権限は、実際のファイル操作時に、PL/SQLのDBMS_LOB
パッケージおよびOCI APIによってチェックおよび施行されます。
関連項目:
- ディレクトリ・オブジェクト使用のガイドライン
GRANT、REVOKE
およびAUDIT
システム、およびBFILE
にセキュリティを提供するオブジェクト権限の詳細は、Oracle Database SQL言語リファレンスを参照してください。
DIRECTORYオブジェクトのカタログ・ビュー
カタログ・ビューは、DIRECTORY
オブジェクト用に提供され、これによってユーザーは、オブジェクトの名前、および対応するパスおよび権限を参照できます。サポートされるビューは次のとおりです。
ALL_DIRECTORIES
(OWNER
、DIRECTORY_NAME
、DIRECTORY_PATH
)このビューには、ユーザーがアクセスできるすべてのディレクトリが記述されます。
DBA_DIRECTORIES
(OWNER
、DIRECTORY_NAME
、DIRECTORY_PATH
)このビューには、データベース全体について指定されたすべてのディレクトリが記述されます。
親トピック: DIRECTORYオブジェクト