CREATE PROFILE

ノート:

リソース制限を設定する場合、このSQL文ではなく、データベース・リソース・マネージャを使用することをお薦めします。データベース・リソース・マネージャを使用すると、リソース使用の管理および監査を柔軟に行うことができます。データベース・リソース・マネージャの詳細は、『Oracle Database管理者ガイド』を参照してください。

目的

CREATE PROFILE文を使用すると、プロファイルを作成できます。プロファイルとは、データベース・リソースの制限の集合です。プロファイルをユーザーに割り当てた場合、そのユーザーはそれらの制限を超えることはできません。

次の方法でユーザーに対するリソース制限を指定します。

  • ALTER SYSTEM文または初期化パラメータRESOURCE_LIMITで動的にリソース制限を使用可能にします。このパラメータは、パスワード・リソースには適用されません。パスワード・リソースは、常に使用可能です。

  • CREATE PROFILE文を使用して、制限を定義するプロファイルを作成します。

  • CREATE USERまたはALTER USER文を使用して、プロファイルを割り当てます。

マルチテナント環境では、ルートおよびPDBの共通ユーザーに異なるプロファイルを割り当てることができます。共通ユーザーがPDBにログインすると、設定がセッションに適用されるプロファイルは、設定がパスワード関連であるかリソース関連であるかに応じて異なります。

  • パスワード関連のプロファイル設定は、ルートの共通ユーザーに割り当てられたプロファイルからフェッチされます。 たとえば、共通プロファイルc##prof (FAILED_LOGIN_ATTEMPTSを1に設定)をルートの共通ユーザーc##adminに割り当てるとします。PDBでは、そのユーザーにローカル・プロファイルlocal_prof(FAILED_LOGIN_ATTEMPTSが6に設定されている)が割り当てられます。 共通ユーザーc##adminが、loc_profが割り当てられているPDBにログインしようとする際、許容されるログイン試行失敗回数は1回のみになります。

  • ルートの共通ユーザーに割り当てられたプロファイルのリソース関連の設定を参照せずに、PDBのユーザーに割り当てられたプロファイルに指定されたリソース関連のプロファイル設定が使用されます。たとえば、PDBのユーザーc##adminに割り当てられているプロファイルlocal_profSESSIONS_PER_USERが2に設定されている場合、ルートのこのユーザーに割り当てられているプロファイルのこの設定の値に関係なく、PDB loc_profにログインするときに、c##adminは2回の同時セッションのみが許可されます。

関連項目:

パスワード管理およびパスワード保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

前提条件

プロファイルを作成する場合、CREATE PROFILEシステム権限が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

関連項目:

構文

create_profile::=

password_parameters::=

セマンティクス

profile

作成するプロファイルの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。プロファイルを使用した場合、ユーザーが使用可能なデータベース・リソースを1つのコールまたは1つのセッションごとに制限できます。

CDB以外では、プロファイル名の先頭をC##またはc##にできません。

CDBでは、プロファイル名の要件は次のとおりです。

  • 共通プロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##です。

  • ローカル・プロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始めないでくださいCOMMON_USER_PREFIXの値に関係なく、ローカル・プロファイルの名前の先頭にC##またはc##を使用できません。

ノート:

COMMON_USER_PREFIXの値が空の文字列である場合、共通またはローカル・プロファイル名に要件はありませんが、次の1つの例外があります。ローカル・プロファイルの名前の先頭にC##またはc##を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通プロファイルの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。

Oracle Databaseでは、次の方法でリソース制限を適用します。

  • CONNECT_TIMEまたはIDLE_TIMEで指定したセッション・リソース制限を超えた場合、現行のトランザクションが自動的にロールバックされ、セッションが終了します。ユーザー・プロセスで次にコールを実行すると、エラーが戻ります。

  • 他のセッション・リソースに対する制限を超える処理を実行しようとした場合、その処理が自動的に中断され、現行の文がロールバックされ、すぐにエラーが戻されます。この後、ユーザーは、現行のトランザクションをコミットまたはロールバックできます。そして、セッションを終了する必要があります。

  • 1つのコールに対する制限を超える処理を実行しようとした場合、その処理が自動的に中断され、現行の文がロールバックされ、エラーが戻されます。この場合、現行のトランザクションは有効です。

ノート:

  • 日を単位として、時間を制限するすべてのパラメータに対して、分数で日数を指定できます。たとえば、1時間は1/24、1分は1/1440になります。

  • リソース制限を使用可能にしているかどうかにかかわらず、ユーザーに対してリソース制限を指定できます。ただし、Oracle Databaseでは、実際にその制限が使用可能になってからリソース制限が適用されます。

UNLIMITED

リソース・パラメータでUNLIMITEDを指定すると、このプロファイルを割り当てられたユーザーは無制限にリソースを使用できます。パスワード・パラメータでUNLIMITEDを指定した場合は、パラメータに制限が設定されていないことを示します。

DEFAULT

DEFAULTを指定すると、このプロファイルでリソースの制限を省略できます。このプロファイルを割り当てられたユーザーは、DEFAULTプロファイルで指定した対象リソースに対する制限を受けます。DEFAULTプロファイルは、最初に無制限のリソースを定義します。ALTER PROFILE文でこの制限を変更できます。

明示的にプロファイルが割り当てられていないユーザーは、DEFAULTプロファイルに定義されている制限を受けます。ユーザーに明示的に割り当てられているプロファイルでリソースに対する制限が省略されている場合、または制限に対してDEFAULTが指定されている場合、ユーザーはDEFAULTプロファイルで定義されているリソースに関する制限を受けます。

resource_parameters

SESSIONS_PER_USER

ユーザーを制限する同時セッションの数を指定します。

CPU_PER_SESSION

1セッション当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。

CPU_PER_CALL

1コール(解析、実行またはフェッチ)当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。

CONNECT_TIME

1セッション当たりの合計経過時間制限を指定します。この値は分単位で指定します。

IDLE_TIME

セッション中の連続的な非活動時間の許容される長さを指定します。この値は分単位で指定します。実行時間の長い問合せおよびその他の操作には、この制限は適用されません。

アイドル・タイムアウトのX分を設定すると、セッションが終了するのにさらに数分かかることに注意してください。

クライアント・アプリケーション側では、アイドル・クライアントが次に新しいコマンドを発行しようとしたときにのみ、エラー・メッセージが表示されます。

LOGICAL_READS_PER_SESSION

メモリーおよびディスクから読み込まれるブロックなど、1セッション中に読み込まれるデータ・ブロックの許容数を指定します。

LOGICAL_READS_PER_CALL

SQL文(解析、実行またはフェッチ)を処理する1コールで読み込まれるデータ・ブロックの許容数を指定します。

PRIVATE_SGA

1セッションでシステム・グローバル領域(SGA)の共有プール内に割り当てることができるプライベート領域の大きさを指定します。この句の詳細は、size_clause」を参照してください。

ノート:

この制限は、共有サーバー・アーキテクチャを使用している場合のみに適用されます。SGA内のセッション用のプライベート領域には、プライベートSQLおよびPL/SQL領域が含まれますが、共有SQLおよびPL/SQL領域は含まれません。

COMPOSITE_LIMIT

1セッション当たりのリソースの総コストを指定します。この値はサービス単位で指定します。サービス単位の合計は、CPU_PER_SESSIONCONNECT_TIMELOGICAL_READS_PER_SESSIONおよびPRIVATE_SGAの重み付き合計として計算されます。

関連項目:

password_parameters

次の句を使用すると、パスワード・パラメータを設定できます。時間の長さを設定するパラメータ(FAILED_LOGIN_ATTEMPTSおよびPASSWORD_REUSE_MAXを除くすべてのパスワード・パラメータ)は、日数で解析されます。これらのパラメータには、テストのために、分(n/1440)または秒(n/86400)を指定できます。また、この目的のために小数値(約1時間を示す.0833など)も使用できます。最小値は1秒です。最大値は24855日です。FAILED_LOGIN_ATTEMPTSおよびPASSWORD_REUSE_MAXには、整数を指定する必要があります。

FAILED_LOGIN_ATTEMPTS

ユーザー・アカウントがロックされる前に、そのアカウントへのログインに連続して失敗できる回数を指定します。この句を指定しない場合、10回がデフォルトになります。

PASSWORD_LIFE_TIME

同じパスワードを認証に使用できる日数を指定します。PASSWORD_GRACE_TIMEの値とともに設定した場合、猶予期間内にパスワードを変更しないと、そのパスワードは使用できなくなり、それ以降の接続は拒否されます。この句を指定しない場合、180日がデフォルトになります。

関連項目:

PASSWORD_LIFE_TIMEの値を短くする場合は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

PASSWORD_REUSE_TIMEおよびPASSWORD_REUSE_MAX

これらの2つのパラメータは互いに組み合せて設定する必要があります。PASSWORD_REUSE_TIMEは、パスワードを再利用できない日数を指定します。PASSWORD_REUSE_MAXは、現行のパスワードを再利用する前に必要な、パスワードの変更回数を指定します。これらのパラメータを有効にするには、両方のパラメータに値を指定する必要があります。

  • 両方のパラメータに値を指定すると、PASSWORD_REUSE_TIMEに指定した日数の間は、PASSWORD_REUSE_MAXに指定した回数までパスワードが変更されなりかぎり、パスワードを再利用できません。

    たとえば、PASSWORD_REUSE_TIMEに30を指定し、PASSWORD_REUSE_MAXに10を指定した場合、パスワードが10回変更されていると、30日後にパスワードを再利用できます。

  • これらのパラメータのいずれかに値を指定し、他方にUNLIMITEDを指定すると、パスワードは再利用できなくなります。

  • いずれかのパラメータにDEFAULTを指定すると、DEFAULTプロファイルに定義された値が使用されます。DEFAULTプロファイルでは、すべてのパラメータはデフォルトでUNLIMITEDに設定されます。DEFAULTプロファイルのデフォルト設定のUNLIMITEDを変更していない場合、パラメータの値はUNLIMITEDとして扱われます。

  • 両方のパラメータをUNLIMITEDに設定すると、これらのパラメータは無視されます。これは、両方のパラメータを指定しない場合のデフォルトです。

PASSWORD_LOCK_TIME

ログインが指定された回数連続して失敗した場合、アカウントがロックされる日数を指定します。この句を指定しない場合、1日がデフォルトになります。

PASSWORD_GRACE_TIME

警告が発行され、ログインが許可される猶予期間の日数を指定します。この句を指定しない場合、7日がデフォルトになります。

INACTIVE_ACCOUNT_TIME

ユーザー・アカウントがロックされるまでの連続非ログイン日数の許容値を指定します。最小値は15日です。最大値は24855です。この句を指定しない場合、UNLIMITEDがデフォルトになります。

PASSWORD_VERIFY_FUNCTION

PASSWORD_VERIFY_FUNCTION句を使用すると、PL/SQLの複雑なパスワード検証スクリプトをCREATE PROFILE文に引数として渡すことができます。Oracle Databaseにはデフォルトのスクリプトがありますが、ユーザー固有のルーチンを作成することも、サード・パーティのソフトウェアを使用することもできます。

  • functionには、複雑なパスワード検証ルーチンの名前を指定します。ファンクションがSYSスキーマ内にある必要があり、ファンクションにEXECUTE権限が必要です。

  • NULLを指定すると、パスワードの検証が行われないことを示します。

パスワード・パラメータにexprを指定する場合、スカラー副問合せ式を除くすべての形式の式を指定できます。

パスワード・パラメータの制限事項

外部ユーザーまたはグローバル・ユーザーにプロファイルを割り当てる場合、パスワードのパラメータは、そのユーザーに対して有効ではありません。

CONTAINER句

CONTAINER句は、CDBに接続しているときに適用されます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。

  • 共通プロファイルを作成するには、ルートに接続する必要があります。ルートに接続する場合にデフォルトのCONTAINER = ALLをオプションで指定できます。

  • ローカル・プロファイルを作成するには、PDBに接続する必要があります。PDBに接続する場合にデフォルトのCONTAINER = CURRENTをオプションで指定できます。

プロファイルの作成: 例

次の文は、プロファイルnew_profileを作成します。

CREATE PROFILE new_profile
  LIMIT PASSWORD_REUSE_MAX 10
        PASSWORD_REUSE_TIME 30;

プロファイルのリソース制限の設定: 例

次の文は、プロファイルapp_userを作成します。

CREATE PROFILE app_user LIMIT 
   SESSIONS_PER_USER          UNLIMITED 
   CPU_PER_SESSION            UNLIMITED 
   CPU_PER_CALL               3000 
   CONNECT_TIME               45 
   LOGICAL_READS_PER_SESSION  DEFAULT 
   LOGICAL_READS_PER_CALL     1000 
   PRIVATE_SGA                15K
   COMPOSITE_LIMIT            5000000; 

ユーザーにapp_userプロファイルを割り当てた場合、そのユーザーは、後続のセッションで次の制限を受けます。

  • ユーザーは、無制限に同時セッションを使用できます。

  • 1つのセッションにおいて、ユーザーはCPU時間を無制限に使用できます。

  • ユーザーが作成した1つのコールで消費できるCPU時間は30秒以下です。

  • 1つのセッションで継続できる時間は45分以下です。

  • 1つのセッションでメモリーおよびディスクから読み込むデータ・ブロック数は、DEFAULTプロファイルで指定した制限を受けます。

  • ユーザーが実行した1つのコールで、メモリーまたはディスクから読み込むことができるデータ・ブロック数の合計は1000以下です。

  • 1つのセッションで割り当てることができるSGA内のメモリーは、15KB以下です。

  • 1つのセッションのリソースの総コストは、サービス単位で500万を超えることはできません。リソースの総コストの計算式は、ALTER RESOURCE COST文で指定します。

  • app_userプロファイルでは、IDLE_TIMEおよびパスワードに対する制限が指定されていないため、ユーザーはDEFAULTプロファイルに指定されているこれらのリソースの制限を受けます。

プロファイルのパスワード制限の設定: 例

次の文は、パスワード制限値が設定されたapp_user2プロファイルを作成します。

CREATE PROFILE app_user2 LIMIT
   FAILED_LOGIN_ATTEMPTS 5
   PASSWORD_LIFE_TIME 60
   PASSWORD_REUSE_TIME 60
   PASSWORD_REUSE_MAX 5
   PASSWORD_VERIFY_FUNCTION ora12c_verify_function
   PASSWORD_LOCK_TIME 1/24
   PASSWORD_GRACE_TIME 10
   INACTIVE_ACCOUNT_TIME 30;

この例では、Oracle Databaseのデフォルトのパスワード検証ファンクションora12c_verify_functionを使用します。この検証ファンクションの使用方法または独自の検証ファンクションの設計方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。