37 DBMS_CREDENTIAL

DBMS_CREDENTIALパッケージは、EXTPROCコールアウト・ファンクションのみでなく、SCHEDULERの外部ジョブ、リモート・ジョブ、ファイル・ウォッチャを認証および偽装するためのインタフェースを提供します。

参照:

この章のトピックは、次のとおりです:

37.1 DBMS_CREDENTIALの概要

資格証明は、EXTPROCコールアウト・ファンクションのみでなく、SCHEDULERのリモート・ジョブ、外部ジョブ、ファイル・ウォッチャを認証および偽装するためのユーザー名とパスワードのペアを保持するデータベース・オブジェクトです。

これらは、CREATE_CREDENTIALプロシージャを使用して作成されます。プロシージャでは、Windowsサーバーに対して実行するリモート外部ジョブでWindowsドメインを指定することもできます。

37.2 DBMS_CREDENTIALのセキュリティ・モデル

Oracle資格証明には、それぞれ一意の資格証明名が付けられています。資格証明の関連付けは、その一意の資格証明名をPL/SQL別名ライブラリを介してEXTPROCに関連付けることで実行できます。

資格証明をPL/SQL別名ライブラリと外部プロシージャに関連付けるには、CREATE AND/OR REPLACE LIBRARY権限またはCREATE AND/OR REPLACE FUNCTION / PROCEDURE権限、および関連付ける別名ライブラリのDLLまたは共有オブジェクトに対する読取り権限が必要です。ファンクションまたはプロシージャを作成または置換(あるいはその両方)して、別名ライブラリを利用できるようにするためです。

認証後は、指定されたユーザー資格証明に定義されているクライアントの識別情報に基づいて、EXTPROCがクライアントのかわりに動作する必要があります。認証されていない場合は、EXTPROCはエラー・メッセージを戻す必要があります。

資格証明を作成または変更するには、CREATE CREDENTIAL権限が必要です。自身のスキーマ以外のスキーマに資格証明を作成しようとしている場合は、CREATE ANY CREDENTIAL権限が必要です。

37.3 DBMS_CREDENTIALの操作上のノート

既存のCREATE OR REPLACE LIBRARY文とCREATE OR REPLACE FUNCTION/PROCEDUREではCREDENTIAL句がサポートされていないため、このモデルのCREATE OR REPLACE LIBRARYおよびCCREATE OR REPLACE FUNCTION/PROCEDUREREATE文では、構文およびセマンティクの変更が必要になります。

次に例を示します。

CREATE OR REPLACE LIBRARY test 
  AS '$ORACLE_HOME/bin/test.so' CREDENTIAL ricky_cred;
CREATE OR REPLACE FUNCTION ftest1
  (x VARCHAR2, y BINARY_INTEGER)
RETURN BINARY_INTEGER
AS LANGUAGE C
LIBRARY test
NAME "negative"
PARAMETERS(x STRING, y INT);

CREDENTIAL句で定義されている資格証明名は、データベース・オブジェクトの名前です。そのため、資格証明名を一重または二重引用符で囲まないでください。

外部ジョブで使用する資格証明の例を、次に示します。

BEGIN
   DBMS_SCHEDULER.CREATE_JOB(
   job_name            => 'example_job',
   job_type            => 'EXECUTABLE',
   job_action          => '/bin/ls',
   credential_name     => 'ricky_cred');
END;
/

37.4 DBMS_CREDENTIALサブプログラムの要約

この表は、DBMS_CREDENTIALサブプログラムを示し、簡単に説明しています。

表37-1 DBMS_CREDENTIALパッケージのサブプログラム

サブプログラム 説明

CREATE_CREDENTIALプロシージャ

Oracle資格証明というデータベース・オブジェクトに、保存済のユーザー名とパスワードのペアを作成します。

DISABLE_CREDENTIALプロシージャ

Oracle資格証明を無効にします。

DROP_CREDENTIALプロシージャ

Oracle資格証明を削除します。

ENABLE_CREDENTIALプロシージャ

Oracle資格証明を有効にします。

UPDATE_CREDENTIALプロシージャ

既存のOracle資格証明を更新します。

37.4.1 CREATE_CREDENTIALプロシージャ

このプロシージャは、Oracle資格証明というデータベース・オブジェクトに、保存済のユーザー名とパスワードのペアを作成します。

構文

DBMS_CREDENTIAL.CREATE_CREDENTIAL (
   credential_name   IN  VARCHAR2,
   username          IN  VARCHAR2,
   password          IN  VARCHAR2,
   database_role     IN  VARCHAR2 DEFAULT NULL
   windows_domain    IN  VARCHAR2 DEFAULT NULL,
   comments          IN  VARCHAR2 DEFAULT NULL,
   enabled           IN  BOOLEAN DEFAULT TRUE);

パラメータ

表37-2 CREATE_CREDENTIALプロシージャのパラメータ

パラメータ 説明

credential_name

資格証明の名前。オプションで、スキーマを接頭辞として付加できます。NULLには設定できません。二重引用符で囲まれていない場合は、大文字に変換されます。

username

この資格証明を選択した場合、ジョブの実行時にオペレーティング・システムまたはリモート・データベースにログインするためのユーザー名。NULLには設定できません。

password

この資格証明を選択した場合、ジョブの実行時にリモート・オペレーティング・システムにログインするためのパスワード。大文字と小文字が区別されます。

database_role

この資格証明を使用するデータベース・ジョブが管理者権限でログインするかどうかを示します。値は、SYSDBA, SYSDGSYSADMINまたはSYSBACKUPです。

windows_domain

Windowsリモート実行可能ファイルがターゲットの場合は、指定したユーザーが属するドメイン。このドメインは、自動的に大文字に変換されます。

comments

ユーザーへの資格証明の説明に使用可能なテキスト文字列。スケジューラでは、このフィールドは使用されません。

enabled

資格証明が有効化されるかどうかを決定します。

使用上のノート

  • 資格証明は特定のスキーマに存在し、CREATE CREDENTIALまたはCREATE ANY CREDENTIALシステム権限を持つユーザーが作成できます。自身のスキーマ以外のスキーマに資格証明を作成するには、CREATE CREDENTIALまたはCREATE ANY CREDENTIAL権限が必要です。

  • ユーザー名では大文字と小文字が区別されます。二重引用符または空白を含むことはできません。

  • 既存の資格証明名を使用して資格証明を作成しようとすると、エラーが戻されます。既存の資格証明を変更するには、ユーザーはDROP_CREDENTIALプロシージャを使用して、まず既存の資格証明を削除する必要があります。

  • 別名ライブラリによってすでに参照されている既存の資格証明を削除しようとすると、エラーが戻されます。既存の資格証明を確認せずに削除するには、DROP_CREDENTIALプロシージャforceパラメータをTRUEに設定する必要があります。

  • 資格証明は、UPDATE_CREDENTIALプロシージャを使用しても変更できます。

基本資格証明の作成

CONN scott
Enter password: password

BEGIN
-- Basic credential.
   DBMS_CREDENTIAL.CREATE_CREDENTIAL(
      credential_name  =>  'JAMES_SMITH_CREDENTIAL',
      username         =>  'james_smith',
      password         =>  'password');
END

Windows資格証明の作成

CONN scott
Enter password: password

-- Credential including Windows domain
BEGIN
  DBMS_CREDENTIAL.CREATE_CREDENTIAL(
     credential_name   =>  'JAMES_SMITH_WIN_CREDENTIAL',
     username          =>  'james_smith',
     password          =>  'password',
     windows_domain    =>  'localdomain');
END

資格証明の表示情報

資格証明に関する情報は、[DBA|ALL|USER] _CREDENTIALSビューを使用して表示されます。

COLUMN credential_name FORMAT A25
COLUMN username FORMAT A20
COLUMN windows_domain FORMAT A20
SELECT credential_name,
       username,
       windows_domain
FROM   user_credentials
ORDER BY credential_name;

CREDENTIAL_NAME           USERNAME             WINDOWS_DOMAIN
------------------------- -------------------- --------------------
JAMES_SMITH_CREDENTIAL       james_smith
JAMES_SMITH_WIN_CREDENTIAL   james_smith             LOCALDOMAIN
2 rows selected.

SQL>

37.4.2 DISABLE_CREDENTIALプロシージャ

このプロシージャは、Oracle資格証明を無効にします。

構文

DBMS_CREDENTIAL.DISABLE_CREDENTIAL (
   credential_name   IN  VARCHAR2,
   force             IN  BOOLEAN DEFAULT FALSE);

パラメータ

表37-3 DISABLE_CREDENTIALプロシージャのパラメータ

パラメータ 説明

credential_name

資格証明の名前。オプションで、スキーマを接頭辞として付加できます。NULLには設定できません。二重引用符で囲まれていない場合は、大文字に変換されます。

force

FALSEの場合、既存のスケジューラ・ジョブまたはPL/SQLライブラリに依存していないかぎり、資格証明は有効なままです。依存性が検出されると、エラーが戻されます。TRUEの場合、資格証明を参照するスケジューラ・ジョブまたはPL/SQLライブラリが存在するかどうかに関係なく、その資格証明は無効になります。

使用上のノート

  • 資格証明は特定のスキーマに存在し、CREATE CREDENTIALまたはCREATE ANY CREDENTIALシステム権限を持つユーザーが無効にできます。自身のスキーマ以外のスキーマで資格証明を無効にするには、CREATE ANY CREDENTIAL権限が必要です。

  • オペレーティング・システムへの特定のユーザーとしてのアクセスのエントリ・ポイントとして、OSユーザーの資格証明を表示できます。資格証明の無効化を許可することで、管理者(または資格証明の所有者)は、(外部ジョブ、データベース・ジョブ、ファイル転送、外部プロシージャ、ファイル・ウォッチの)特定のユーザーとしてのデータベースからOSへのすべてのログインを迅速かつ簡単に、また可逆的に拒否することができます。既存の無効な資格証明を有効にするには、ENABLE_CREDENTIALプロシージャを使用する必要があります。

  • ライブラリは、その資格証明のプロパティ(Windowsドメイン、ユーザー名、パスワード、有効ビットまたは無効ビットなど)が変更されると、無効になる場合があります。

37.4.3 DROP_CREDENTIALプロシージャ

このプロシージャは、Oracle資格証明を削除します。

構文

DBMS_CREDENTIAL.DROP_CREDENTIAL (
   credential_name   IN  VARCHAR2,
   force             IN  BOOLEAN DEFAULT FALSE);

パラメータ

表37-4 DROP_CREDENTIALプロシージャのパラメータ

パラメータ 説明

credential_name

資格証明の名前。オプションで、スキーマを接頭辞として付加できます。NULLには設定できません。

force

FALSEに設定する場合、資格証明をEXTPROC別名ライブラリで参照することはできません。参照すると、エラーが発生します。TRUEに設定する場合、資格証明を参照するextproc別名ライブラリが存在するかどうかに関係なく、その資格証明は削除されます。削除された資格証明を参照するEXTPROC別名ライブラリは無効になります。

使用上のノート

資格証明を削除できるのは、その資格証明の所有者かCREATE ANY CREDENTIALシステム権限を持つユーザーのみです。

EXEC DBMS_CREDENTIAL.DROP_CREDENTIAL('JAMES_SMITH_CREDENTIAL', FALSE);
EXEC DBMS_CREDENTIAL.DROP_CREDENTIAL('JAMES_SMITH_WIN_CREDENTIAL', FALSE);

37.4.4 ENABLE_CREDENTIALプロシージャ

このプロシージャは、Oracle資格証明を有効にします。

構文

DBMS_CREDENTIAL.ENABLE_CREDENTIAL (
   credential_name   IN  VARCHAR2);

パラメータ

表37-5 ENABLE_CREDENTIALプロシージャのパラメータ

パラメータ 説明

credential_name

資格証明の名前。オプションで、スキーマを接頭辞として付加できます。NULLには設定できません。二重引用符で囲まれていない場合は、大文字に変換されます。

使用上のノート

  • 資格証明は特定のスキーマに存在し、CREATE CREDENTIAL OR CREATE ANY CREDENTIALシステム権限を持つユーザーが無効にできます。自身のスキーマ以外のスキーマで資格証明を無効にするには、CREATE CREDENTIAL OR CREATE ANY CREDENTIAL権限が必要です。

  • オペレーティング・システムへの特定のユーザーとしてのアクセスのエントリ・ポイントとして、OSユーザーの資格証明を表示できます。資格証明の無効化を許可することで、管理者(または資格証明の所有者)は、(外部ジョブ、ファイル転送、外部プロシージャ、ファイル・ウォッチの)特定のユーザーとしてのデータベースからOSへのすべてのログインを迅速かつ簡単に、また可逆的に拒否することができます。既存の資格証明を無効にするには、DISABLE_CREDENTIALプロシージャを使用する必要があります。

  • ライブラリは、その資格証明のプロパティ(Windowsドメイン、ユーザー名、パスワード、有効ビットまたは無効ビットなど)が変更されると、無効になる場合があります。

37.4.5 UPDATE_CREDENTIALプロシージャ

このプロシージャは、既存のOracle資格証明を更新します。

構文

DBMS_CREDENTIAL.UPDATE_CREDENTIAL (
   credential_name   IN   VARCHAR2,
   attribute         IN   VARCHAR2, 
   value             IN   VARCHAR2);

パラメータ

表37-6 UPDATE_CREDENTIALプロシージャのパラメータ

パラメータ 説明

credential_name

資格証明の名前。オプションで、スキーマを接頭辞として付加できます。NULLには設定できません。二重引用符で囲まれていない場合は、大文字に変換されます。

attribute

更新する属性の名前。USERNAMEPASSWORDWINDOWS_DOMAINDATABASE_ROLEまたはCOMMENTSです。

value

選択した属性の新しい値。

使用上のノート

  • 資格証明は特定のスキーマに存在し、CREATE CREDENTIALまたはCREATE ANY CREDENTIALシステム権限を持つユーザーが作成できます。自身のスキーマ以外のスキーマに資格証明を作成するには、CREATE ANY CREDENTIAL権限が必要です。

  • ユーザー名では大文字と小文字が区別されます。二重引用符または空白を含むことはできません。

  • 更新された資格証明を参照するEXTPROC別名ライブラリは無効になります。ライブラリは、その資格証明のプロパティ(Windowsドメイン、ユーザー名、パスワード、有効ビットまたは無効ビットなど)が変更されると、無効になります。

基本資格証明の更新

CONN scott
Enter password: password

BEGIN
-- Basic credential.
   DBMS_CREDENTIAL.UPDATE_CREDENTIAL (
      credential_name  =>  'JAMES_SMITH_CREDENTIAL',
      attribute        =>  'password',
      value            =>  'password2');

   DBMS_CREDENTIAL.UPDATE_CREDENTIAL (
      credential_name  =>  'JAMES_SMITH_CREDENTIAL',
      attribute        =>  'username',
      value            => 'james_smith');
END;

Windows資格証明の更新

CONN scott
Enter password: password

-- Credential including Windows domain
BEGIN
  DBMS_CREDENTIAL.UPDATE_CREDENTIAL(
     credential_name   =>  'JAMES_SMITH_WIN_CREDENTIAL',
     username          =>  'james_smith',
     password          =>  'password',
     windows_domain    =>  'localdomain');
END

資格証明の表示情報

資格証明に関する情報は、[DBA|ALL|USER] _CREDENTIALSビューを使用して表示されます。

COLUMN credential_name FORMAT A25
COLUMN username FORMAT A20
COLUMN windows_domain FORMAT A20
SELECT credential_name,
       username,
       windows_domain
FROM   all_credentials
ORDER BY credential_name;

CREDENTIAL_NAME           USERNAME             WINDOWS_DOMAIN
------------------------- -------------------- --------------------
JAMES_SMITH_CREDENTIAL       james_smith
JAMES_SMITH_WIN_CREDENTIAL   james_smith             LOCALDOMAIN
2 rows selected.

SQL>