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_prof
でSESSIONS_PER_USER
が2に設定されている場合、ルートのこのユーザーに割り当てられているプロファイルのこの設定の値に関係なく、PDBloc_prof
にログインするときに、c##admin
は2回の同時セッションのみが許可されます。
関連項目:
パスワード管理およびパスワード保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
前提条件
プロファイルを作成する場合、CREATE
PROFILE
システム権限が必要です。
CONTAINER
句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER
=
ALL
を指定する場合は、現在のコンテナがルートである必要があります。CONTAINER
=
CURRENT
を指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。
関連項目:
-
動的にリソース制限を使用可能にする場合の詳細は、「ALTER SYSTEM」を参照してください。
-
RESOURCE_LIMIT
パラメータについては、『Oracle Databaseリファレンス』を参照してください。 -
プロファイルについては、「CREATE USER」および「ALTER USER」を参照してください。
構文
create_profile::=
セマンティクス
profile
作成するプロファイルの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。プロファイルを使用した場合、ユーザーが使用可能なデータベース・リソースを1つのコールまたは1つのセッションごとに制限できます。
CDB以外では、プロファイル名の先頭をC##
またはc##
にできません。
ノート:
マルチテナント・コンテナ・データベースが、Oracle Database 21c以降のリリースで唯一サポートされているアーキテクチャです。ドキュメントが改訂されている間は、従来の用語が残っている可能性があります。ほとんどの場合、「データベース」と「非CDB」は、コンテキストに応じてCDBまたはPDBを指しています。アップグレードなどのコンテキストでは、「非CDB」が以前のリリースの非CDBを指す場合もあります。
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つのコールに対する制限を超える処理を実行しようとした場合、その処理が自動的に中断され、現行の文がロールバックされ、エラーが戻されます。この場合、現行のトランザクションは有効です。
MANDATORY
キーワードMANDATORY
を指定すると、CDB$ROOT
に汎用必須プロファイルを作成できます。必須プロファイルを使用すると、プロファイル・パラメータpassword_verify_function
を使用して、CDB全体または個々のPDBでデータベース・ユーザー・アカウントのパスワードの複雑性の要件を強制できます。
必須プロファイルでは、共通ユーザーおよびローカル・ユーザーの既存のプロファイル制限に加えて、パスワードの複雑性の要件が追加されます。PDB管理者がパスワードの複雑性の要件を削除して、ユーザーがセキュアでない短いパスワードを設定できるようにすることはできません。必須プロファイルは共通プロファイルと同様に、CDB$ROOT
でしか変更できないためです。
password_verify_function
とpassword_grace_time
プロファイル・パラメータのみを使用して、必須プロファイルの制限を定義できます。
プロファイル・パラメータpassword_grace_time
を使用すると、必須パスワードの複雑性の要件に違反してパスワードを変更する必要があるユーザー・アカウントの猶予期間を指定できます。Oracle Data Pumpを使用してインポートされたユーザー・アカウントは、必須プロファイルに対するパスワード・コンプライアンスがチェックされ、パスワードの変更が強制されます。猶予期間内にパスワードが変更されない場合、それ以降の接続は拒否されます。
password_verify_function
のデフォルト値はnullです。password_grace_time
のデフォルト値は0です。
ユーザー作成のパスワード複雑性ファンクション: 例
この例では、パスワードの複雑性ファンクションmy_mandatory_function
をPASSWORD_VERIFY_FUNCTION
の引数として作成します。
SQL> create or replace function my_mandatory_verify_function ( username varchar2, password varchar2, old_password varchar2) return boolean IS begin -- mandatory verify function will always be evaluated regardless of the -- password verify function that is associated to a particular profile/user -- requires the minimum password length to be 8 characters if not ora_complexity_check(password, chars => 8) then return(false); end if; return(true); end; / 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Function created.
必須プロファイルの作成: 例
この例では、必須プロファイルc##cdb_profile
を作成します。LIMIT
は、許可されている唯一のプロファイル・パラメータPASSWORD_VERIFY_FUNCTION
を使用するようにプロファイルを制限します。PASSWORD_VERIFY_FUNCTION
は、ユーザー作成のパスワードの複雑性ファンクションmy_mandatory_function
を指定します。
CREATE MANDATORY PROFILE c##cdb_profile LIMIT PASSWORD_VERIFY_FUNCTION my_mandatory_function CONTAINER = ALL ;
CDB内のすべてのPDBに必須ユーザー・プロファイルを適用する場合は、ALTER SYSTEM
文を使用してCDBルートで適用する必要があります。
CDB全体への必須プロファイルの適用: 例
この文を実行するには、CDB$ROOT
にいる必要があります。
ALTER SYSTEM SET MANDATORY_USER_PROFILE=c##cdb_profile;
個々のPDBに必須ユーザー・プロファイルを適用する場合は、PDBに関連付けられているinit.ora
ファイルでMANDATORY_USER_PROFILE
パラメータを構成する必要があります。
個々のPDBへの必須プロファイルの適用: 例
PDBに関連付けられているinit.ora
ファイルを開き、MANDATORY_USER_PROFILE
を設定します。
MANDATORY_USER_PROFILE=c##cdb_profile;
SHOW PARAMETER
を使用すると、現在のMANDATORY_USER_PROFILE
設定を確認できます。
init.ora
で設定した必須プロファイルは、CDBルートのALTER SYSTEM
文で設定した必須プロファイルより優先されます。
制限事項
-
ALTER PROFILE
システム権限を共通に付与されている共通ユーザーのみが、CDBルートからのみ必須プロファイルを変更または削除できます。 -
ALTER SYSTEM
権限を共通に付与された共通ユーザー、またはSYSDBA
管理権限を持つ共通ユーザーのみが、init.ora
ファイルのMANDTORY_USER_PROFILE
を変更できます。
ノート:
-
日を単位として、時間を制限するすべてのパラメータに対して、分数で日数を指定できます。たとえば、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
ユーザーを制限する同時セッションの数を指定します。
1セッション当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。
1コール(解析、実行またはフェッチ)当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。
CONNECT_TIME
1セッション当たりの合計経過時間制限を指定します。この値は分単位で指定します。
IDLE_TIME
セッション中の連続的な非活動時間の許容される長さを指定します。この値は分単位で指定します。実行時間の長い問合せおよびその他の操作には、この制限は適用されません。
アイドル・タイムアウトをX分に設定すると、セッションの終了にX分プラス数分かかることに注意してください。
クライアント・アプリケーション側では、アイドル・クライアントが次に新しいコマンドを発行しようとしたときに、エラー・メッセージが表示されます。
LOGICAL_READS_PER_SESSION
メモリーおよびディスクから読み込まれるブロックなど、1セッション中に読み込まれるデータ・ブロックの許容数を指定します。
SQL文(解析、実行またはフェッチ)を処理する1コールで読み込まれるデータ・ブロックの許容数を指定します。
PRIVATE_SGA
1セッションでシステム・グローバル領域(SGA)の共有プール内に割り当てることができるプライベート領域の大きさを指定します。この句の詳細は、「size_clause」を参照してください。
ノート:
この制限は、共有サーバー・アーキテクチャを使用している場合のみに適用されます。SGA内のセッション用のプライベート領域には、プライベートSQLおよびPL/SQL領域が含まれますが、共有SQLおよびPL/SQL領域は含まれません。
1セッション当たりのリソースの総コストを指定します。この値はサービス単位で指定します。サービス単位の合計は、CPU_PER_SESSION
、CONNECT_TIME
、LOGICAL_READS_PER_SESSION
およびPRIVATE_SGA
の重み付き合計として計算されます。
関連項目:
-
セッション・リソースの重み付けを指定する方法については、「ALTER RESOURCE COST」を参照してください。
password_parameters
次の句を使用すると、パスワード・パラメータを設定できます。時間の長さを設定するパラメータ(FAILED_LOGIN_ATTEMPTS
およびPASSWORD_REUSE_MAX
を除くすべてのパスワード・パラメータ)は、日数で解析されます。これらのパラメータには、テストのために、分(n/1440)または秒(n/86400)を指定できます。また、この目的のために小数値(約1時間を示す.0833など)も使用できます。最小値は1秒です。最大値は24855日です。FAILED_LOGIN_ATTEMPTS
およびPASSWORD_REUSE_MAX
には、整数を指定する必要があります。
ユーザー・アカウントがロックされる前に、そのアカウントへのログインに連続して失敗できる回数を指定します。この句を指定しない場合、10回がデフォルトになります。
同じパスワードを認証に使用できる日数を指定します。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
プロファイルでは、PASSWORD_REUSE_TIME
およびPASSWORD_REUSE_MAX
パラメータはデフォルトでUNLIMITED
に設定されています。DEFAULT
プロファイルのデフォルト設定のUNLIMITED
を変更していない場合、パラメータの値はUNLIMITED
として扱われます。 -
両方のパラメータを
UNLIMITED
に設定すると、これらのパラメータは無視されます。これは、両方のパラメータを指定しない場合のデフォルトです。
ログインが指定された回数連続して失敗した場合、アカウントがロックされる日数を指定します。この句を指定しない場合、1日がデフォルトになります。
警告が発行され、ログインが許可される猶予期間の日数を指定します。この句を指定しない場合、7日がデフォルトになります。
INACTIVE_ACCOUNT_TIME
ユーザー・アカウントがロックされるまでの連続非ログイン日数の許容値を指定します。最小値は15日です。最大値は24855です。この句を指定しない場合、UNLIMITED
がデフォルトになります。
PASSWORD_VERIFY_FUNCTION
を指定することにより、PL/SQLパスワードの複雑性の検証スクリプトをCREATE PROFILE
の引数として渡すことができます。Oracle Databaseにはデフォルトのスクリプトが用意されていますが、独自のファンクションを作成することも、サード・パーティのソフトウェアを使用することもできます。
-
function
には、パスワードの複雑性検証ファンクションの名前を指定します。ファンクションはSYS
スキーマ内にある必要があり、ファンクションに対するEXECUTE
権限が必要です。 -
NULL
を指定すると、パスワードの検証が行われないことを示します。
パスワード・パラメータにexpr
を指定する場合、スカラー副問合せ式を除くすべての形式の式を指定できます。
パスワード・パラメータの制限事項
外部ユーザーまたはグローバル・ユーザーにプロファイルを割り当てる場合、パスワードのパラメータは、そのユーザーに対して有効ではありません。
関連項目:
PASSWORD_ROLLOVER_TIME
段階的なデータベース・パスワード・ロールオーバーを有効にするには、PASSWORD_ROLLOVER_TIME
ユーザー・プロファイル・パラメータにゼロ以外の制限を構成する必要があります。このパラメータは、CREATE PROFILE
またはALTER PROFILE
を使用して構成できます。
expr
を使用して、PASSWORD_ROLLOVER_TIME
の値を日数で指定します。時間は1日の分数として指定する必要があります。たとえば、制限を4時間に設定する場合、expr
は4/24
になります。
PASSWORD_ROLLOVER_TIME
制限値の粒度は1秒です。たとえば、( 1/24) + ( 3/1440) + (5/86400) )
のようにexpr
を指定することで、1時間と3分5秒の制限を設定できます。
PASSWORD_ROLLOVER_TIME
のデフォルト設定は0で、段階的なパスワード・ロールオーバーが無効であることを意味します。
例
この例では、段階的なパスワード・ロールオーバー期間を1日に設定します。
CREATE PROFILE usr_prof LIMIT PASSWORD_ROLLOVER_TIME 1
PASSWORD_ROLLOVER_TIME
の制限:
-
パスワード・ロールオーバー期間を無効にする場合は、
PASSWORD_ROLLOVER_TIME
に値0を指定します。 -
PASSWORD_ROLLOVER_TIME
に正の値を指定すると、プロファイルのメンバーであるすべてのユーザーに対してパスワード・ロールオーバー機能が有効になります。 -
PASSWORD_ROLLOVER_TIME
に指定できる最小値は1時間です。これには、1/24
と入力します。パスワード・ロールオーバー時間を6時間に設定する場合は、PASSWORD_ROLLOVER_TIME
の値として6/24
を入力します。 -
PASSWORD_ROLLOVER_TIME
の値は、60日、またはプロファイルのPASSWORD_GRACE_TIME
制限の現在の値、あるいはプロファイルのPASSWORD_LIFE_TIME
制限の現在の値のいずれか低い方を超えることはできません。
パスワード・ロールオーバー期間中のユーザー・アカウントを検索するには、DBA_USERS
データ・ディクショナリ・ビューのACCOUNT_STATUS
列を問い合せます。ステータスはIN ROLLOVER
になります。
パスワード・ロールオーバー期間は、ユーザーがパスワードを変更した時点から始まります。
関連項目:
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セキュリティ・ガイド』を参照してください。