49 DBMS_CREDENTIAL
DBMS_CREDENTIAL
パッケージは、EXTPROC
コールアウト・ファンクションのみでなく、SCHEDULER
の外部ジョブ、リモート・ジョブ、ファイル・ウォッチャを認証および偽装するためのインタフェースを提供します。
参照:
-
ジョブの資格証明の指定については、『Oracle Database管理者ガイド』を参照してください。
-
外部プロセスのセキュリティ確保のガイドラインについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。
この章のトピックは、次のとおりです:
49.1 DBMS_CREDENTIALの概要
資格証明は、EXTPROC
コールアウト・ファンクションのみでなく、SCHEDULER
のリモート・ジョブ、外部ジョブ、ファイル・ウォッチャを認証および偽装するためのユーザー名とパスワードのペアを保持するデータベース・オブジェクトです。
これらは、CREATE_CREDENTIALプロシージャを使用して作成されます。プロシージャでは、Windowsサーバーに対して実行するリモート外部ジョブでWindowsドメインを指定することもできます。
49.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
権限が必要です。
49.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; /
49.4 DBMS_CREDENTIALサブプログラムの要約
この表は、DBMS_CREDENTIAL
サブプログラムを示し、簡単に説明しています。
表49-1 DBMS_CREDENTIALパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
Oracle資格証明というデータベース・オブジェクトに、保存済のユーザー名とパスワードのペアを作成します。 |
|
Oracle資格証明を無効にします。 |
|
Oracle資格証明を削除します。 |
|
Oracle資格証明を有効にします。 |
|
既存のOracle資格証明を更新します。 |
49.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);
パラメータ
表49-2 CREATE_CREDENTIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
資格証明の名前。オプションで、スキーマを接頭辞として付加できます。 |
|
この資格証明を選択した場合、ジョブの実行時にオペレーティング・システムまたはリモート・データベースにログインするためのユーザー名。 |
|
この資格証明を選択した場合、ジョブの実行時にリモート・オペレーティング・システムにログインするためのパスワード。大文字と小文字が区別されます。 |
|
この資格証明を使用するデータベース・ジョブが管理者権限でログインするかどうかを示します。値は、 |
|
Windowsリモート実行可能ファイルがターゲットの場合は、指定したユーザーが属するドメイン。このドメインは、自動的に大文字に変換されます。 |
|
ユーザーへの資格証明の説明に使用可能なテキスト文字列。スケジューラでは、このフィールドは使用されません。 |
|
資格証明が有効化されるかどうかを決定します。 |
使用上のノート
-
資格証明は特定のスキーマに存在し、
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',
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>
49.4.2 DISABLE_CREDENTIALプロシージャ
このプロシージャは、Oracle資格証明を無効にします。
構文
DBMS_CREDENTIAL.DISABLE_CREDENTIAL ( credential_name IN VARCHAR2, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表49-3 DISABLE_CREDENTIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
資格証明の名前。オプションで、スキーマを接頭辞として付加できます。 |
|
|
使用上のノート
-
資格証明は特定のスキーマに存在し、
CREATE
CREDENTIAL
またはCREATE
ANY
CREDENTIAL
システム権限を持つユーザーが無効にできます。自身のスキーマ以外のスキーマで資格証明を無効にするには、CREATE
ANY
CREDENTIAL
権限が必要です。 -
オペレーティング・システムへの特定のユーザーとしてのアクセスのエントリ・ポイントとして、OSユーザーの資格証明を表示できます。資格証明の無効化を許可することで、管理者(または資格証明の所有者)は、(外部ジョブ、データベース・ジョブ、ファイル転送、外部プロシージャ、ファイル・ウォッチの)特定のユーザーとしてのデータベースからOSへのすべてのログインを迅速かつ簡単に、また可逆的に拒否することができます。既存の無効な資格証明を有効にするには、ENABLE_CREDENTIALプロシージャを使用する必要があります。
-
ライブラリは、その資格証明のプロパティ(Windowsドメイン、ユーザー名、パスワード、有効ビットまたは無効ビットなど)が変更されると、無効になる場合があります。
49.4.3 DROP_CREDENTIALプロシージャ
このプロシージャは、Oracle資格証明を削除します。
構文
DBMS_CREDENTIAL.DROP_CREDENTIAL ( credential_name IN VARCHAR2, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表49-4 DROP_CREDENTIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
資格証明の名前。オプションで、スキーマを接頭辞として付加できます。 |
|
|
使用上のノート
資格証明を削除できるのは、その資格証明の所有者かCREATE
ANY
CREDENTIAL
システム権限を持つユーザーのみです。
例
EXEC DBMS_CREDENTIAL.DROP_CREDENTIAL('JAMES_SMITH_CREDENTIAL', FALSE); EXEC DBMS_CREDENTIAL.DROP_CREDENTIAL('JAMES_SMITH_WIN_CREDENTIAL', FALSE);
49.4.4 ENABLE_CREDENTIALプロシージャ
このプロシージャは、Oracle資格証明を有効にします。
構文
DBMS_CREDENTIAL.ENABLE_CREDENTIAL ( credential_name IN VARCHAR2);
パラメータ
表49-5 ENABLE_CREDENTIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
資格証明の名前。オプションで、スキーマを接頭辞として付加できます。 |
使用上のノート
-
資格証明は特定のスキーマに存在し、
CREATE
CREDENTIAL
OR
CREATE
ANY
CREDENTIAL
システム権限を持つユーザーが無効にできます。自身のスキーマ以外のスキーマで資格証明を無効にするには、CREATE
CREDENTIAL
OR
CREATE
ANY
CREDENTIAL
権限が必要です。 -
オペレーティング・システムへの特定のユーザーとしてのアクセスのエントリ・ポイントとして、OSユーザーの資格証明を表示できます。資格証明の無効化を許可することで、管理者(または資格証明の所有者)は、(外部ジョブ、ファイル転送、外部プロシージャ、ファイル・ウォッチの)特定のユーザーとしてのデータベースからOSへのすべてのログインを迅速かつ簡単に、また可逆的に拒否することができます。既存の資格証明を無効にするには、DISABLE_CREDENTIALプロシージャを使用する必要があります。
-
ライブラリは、その資格証明のプロパティ(Windowsドメイン、ユーザー名、パスワード、有効ビットまたは無効ビットなど)が変更されると、無効になる場合があります。
49.4.5 UPDATE_CREDENTIALプロシージャ
このプロシージャは、既存のOracle資格証明を更新します。
構文
DBMS_CREDENTIAL.UPDATE_CREDENTIAL ( credential_name IN VARCHAR2, attribute IN VARCHAR2, value IN VARCHAR2);
パラメータ
表49-6 UPDATE_CREDENTIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
資格証明の名前。オプションで、スキーマを接頭辞として付加できます。 |
|
更新する属性の名前。 |
|
選択した属性の新しい値。 |
使用上のノート
-
資格証明は特定のスキーマに存在し、
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>