ユーザの作成時にプロファイルを作成する事ができます。
	プロファイルとはデータベース・リソースに関する制限の集合です。
	あるユーザーに対してプロファイルを割り当てると、そのユーザーはその割当て制限を超えることはできません。 
	例えば、以下の様な制限を設ける事ができます。
リソース制限
	ユーザーが使用できるシステム・リソースを制限します。
	例えば、ユーザーが誤った無限ループ処理を行い、CPUが無制限に浪費されることのないように、使用可能な上限値を設定できます。 
	設定したリソース制限を超えると、現行の処理はロールバックされます。
パスワード管理
	パスワード管理を強化します。
	 例えば、パスワードを定期的に変更させたり、誤ったパスワードを何度も入力できないようにすることができます。
アカウントのロッキング
	あらかじめ設定した回数以上ログインを失敗した場合、自動的にそのアカウントをロックすることができます。
パスワードの有効期限
	ある特定の期間、あるいは特定の回数分パスワードの履歴を保持します。
	パスワードの変更が行われた際に、以前使用されたパスワードが、再度設定されることのないように検査を行います。
パスワード・ルールの検証
	Oracle8では、標準のパスワード・ルールを提供しています。
	例えば、入力文字数が4文字以上、ユーザー名と同一は不可などがあります。
プロファイルを作成するには CREATE PROFILE 文を使用します。
	
| 【構文】プロファイルの作成 | 
|---|
| CREATE PROFILE プロファイル名 LIMIT リソース名 パラメータ...; | 
プロファイルにおけるリソースにはリソース制限とパスワード管理があり、この2つは有効にする方法が異なります。
	リソース制限にはセッション単位[S](Oracleに接続してから切断するまで)のものと、コール単位[C](1SQL文単位)のものがあります。
    
| リソース名(リソース制限) | 意味 | 
|---|---|
| SESSION_PER_USER[S] | 1人のユーザーの同時セッション数(整数で指定)を制限します。 | 
| CPU_PER_SESSION[S] | 1セッション当たりのCPU時間を制限します。この値は、 100分の1秒単位で表します。 | 
| CPU_PER_CALL[C] | 1コール(解析、実行、取出しなど)当たりのCPU時間を制限します。この値は、100分の1秒単位で表します。 | 
| CONNECT_TIME[S] | 1セッション当たりの合計経過時間を制限します。この値は、分単位で表します。 | 
| IDLE_TIME[S] | セッション中の連鎖する非活動時間を制限します。この値は、分単位で表します。実行時間の長い問合せなどの操作は、この制限を受けません。 | 
| LOGICAL_READS_PER_SESSION[S] | メモリーおよびディスクから読み取られるブロックなど、セッション中に読み取られるデータ・ブロックの数を整数で指定するブロック数に制限します。 | 
| LOGICAL_READS_PER_CALL[C] | SQL文の処理コール(解析または実行、フェッチ)で読み取られるデータ・ブロックの数を 整数で指定するブロック数に制限します。 | 
| COMPOSITE_LIMIT[S] | 1セッション当たりのリソースの総コストを制限します。このパラメータの値は、サービス単位で表す必要があります。 | 
| PRIVATE_SGA[S] | 1セッションでシステム・グローバル領域(SGA)の共有プール内で割当て可能なプライベート領域を、integerで指定する整数バイト数に制限します。 KまたはMを使用してKBまたはMB単位でも制限を指定できます。 | 
| リソース名(パスワード管理) | 意味 | 
|---|---|
| FAILED_LOGIN_ATTEMPTS | アカウントからのロックアウト前に許可されるログイン試行の失敗回数を制限します。 | 
| PASSWORD_LIFE_TIME | パスワードの存続期間を、整数で指定する日数に制限します。この日数を超えるとパスワードの使用期限が切れます。 | 
| PASSWORD_REUSE_TIME | パスワードの使用期限が切れた後、再使用できるまでの日数を制限します。 PASSWORD_REUSE_TIMEを整数値に設定する場合、PASSWORD_REUSE_MAXをUNLIMITEDに設定しなければなりません。 | 
| PASSWORD_REUSE_MAX | パスワードの再使用に必要なパスワード変更回数を指定します。 PASSWORD_REUSE_MAXを整数値に設定する場合、 PASSWORD_REUSE_TIMEをUNLIMITEDに設定しなければなりません。 | 
| ACCOUNT_LOCK_TIME | アカウントがロックされる日数を指定します。 | 
| PASSWORD_GRACE_TIME | パスワードを変更できる猶予期間の日数を制限します。この日数は、パスワードの期限切れの後に最初に正常にログインしたときから数えます。特定した猶予期間中にパスワードが変更されない場合、そのユーザーのアカウントはロックされます。 | 
| PASSWORD_VERIFY_FUNCTION | PL/SQLのパスワードの複雑さ検証スクリプトをCREATE PROFILEコマンドの引数として渡すことを可能にします。 Oracleには、デフォルトのスクリプトがありますが、ユーザー固有のルーチンを作成することも、サード・パーティのソフトウェアを使用することもできます。 | 
Oracleは、DEFAULTという名前の付いたデフォルト・プロファイルを自動的に作成します。このプロファイルは、無制限のリソースを定義しています。
	特にプロファイル名の指定のないユーザーは、DEFAULTプロファイルを使用します。
	リソース制限を有効にするためには、パラメータ・ファイル の RESOURCE_LIMIT を TRUEにします。
	または、ALTER SYSTEMコマンドを使用して、動的にRESOURCE_LIMIT を TRUEに変更でき、次のセッションから有効になります。
	
| 【例】プロファイルの作成 | 
|---|
| Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
に接続されました。
@SQL> SELECT USERNAME FROM USER_USERS; ←現在のユーザを表示
USERNAME
------------------------------
SYSTEM
ASQL> DESC DBA_USERS; ←DBA_USERSディクショナリの確認
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED                                   NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)
BSQL> SELECT USERNAME, PROFILE FROM DBA_USERS; ←現在のDBに登録済みのユーザ一覧を表示
USERNAME                       PROFILE
------------------------------ ------------------------------
SYS                            DEFAULT
SYSTEM                         DEFAULT
IR01                           DEFAULT
OUTLN                          DEFAULT
DBSNMP                         DEFAULT
5行が選択されました。
CSQL> CREATE PROFILE NIKA_PROF LIMIT ← NIKA_PROF というプロファイルを作成
  2  CONNECT_TIME DEFAULT
  3  FAILED_LOGIN_ATTEMPTS 1
  4  PASSWORD_LIFE_TIME 90
  5  PASSWORD_LOCK_TIME 30
  6  PASSWORD_GRACE_TIME 10
  7  ;
プロファイルが作成されました。
/*
   1セッション当たりの合計経過時間はデフォルト(DEFAULT)。
   パスワードの入力失敗は1回(FAILED_LOGIN_ATTEMPTS)のみ。
   1回でも失敗するとアカウントは30日間ロック(PASSWORD_LOCK_TIME)される。
   また、パスワードは90日以内(PASSWORD_LIFE_TIME)に変更する必要がある。
   90日以降も10日間の猶予期間中(PASSWORD_GRACE_TIME)は、警告メッセージが表示される。
*/
SQL> CREATE USER NIKA IDENTIFIED BY NIKA2001 ←ユーザ NIKA、パスワード NIKA2001 で作成、プロファイルは NIKA_PROF
  2  DEFAULT TABLESPACE DATA01
  3  TEMPORARY TABLESPACE TEMP
  4  PROFILE NIKA_PROF
  5  ;
ユーザーが作成されました。
SQL> GRANT CONNECT, RESOURCE TO NIKA;
権限付与が成功しました。
DSQL> SELECT USERNAME, PROFILE FROM DBA_USERS; ←再度現在のDBに登録済みのユーザ一覧を表示してみる
USERNAME                       PROFILE
------------------------------ ------------------------------
SYS                            DEFAULT
SYSTEM                         DEFAULT
IR01                           DEFAULT
OUTLN                          DEFAULT
DBSNMP                         DEFAULT
NIKA                           NIKA_PROF ← プロファイルは NIKA_PROF で作成されている。
6行が選択されました。
SQL> DESC DBA_PROFILES  ← DBA_PROFILES ディクショナリの確認(後述)
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 PROFILE                                   NOT NULL VARCHAR2(30)
 RESOURCE_NAME                             NOT NULL VARCHAR2(32)
 RESOURCE_TYPE                                      VARCHAR2(8)
 LIMIT                                              VARCHAR2(40)
SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT'; ← DBA_PROFILES ビューを DEFAULT で表示
PROFILE         RESOURCE_NAME                  RESOURCE LIMIT
--------------- ------------------------------ -------- ----------
DEFAULT         COMPOSITE_LIMIT                KERNEL   UNLIMITED
DEFAULT         SESSIONS_PER_USER              KERNEL   UNLIMITED
DEFAULT         CPU_PER_SESSION                KERNEL   UNLIMITED
DEFAULT         CPU_PER_CALL                   KERNEL   UNLIMITED
DEFAULT         LOGICAL_READS_PER_SESSION      KERNEL   UNLIMITED
DEFAULT         LOGICAL_READS_PER_CALL         KERNEL   UNLIMITED
DEFAULT         IDLE_TIME                      KERNEL   UNLIMITED
DEFAULT         CONNECT_TIME                   KERNEL   UNLIMITED
DEFAULT         PRIVATE_SGA                    KERNEL   UNLIMITED
DEFAULT         FAILED_LOGIN_ATTEMPTS          PASSWORD UNLIMITED
DEFAULT         PASSWORD_LIFE_TIME             PASSWORD UNLIMITED
DEFAULT         PASSWORD_REUSE_TIME            PASSWORD UNLIMITED
DEFAULT         PASSWORD_REUSE_MAX             PASSWORD UNLIMITED
DEFAULT         PASSWORD_VERIFY_FUNCTION       PASSWORD UNLIMITED
DEFAULT         PASSWORD_LOCK_TIME             PASSWORD UNLIMITED
DEFAULT         PASSWORD_GRACE_TIME            PASSWORD UNLIMITED
16行が選択されました。
SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE = 'NIKA_PROF'; ← DBA_PROFILES ビューを NIKA_PROF で表示
PROFILE         RESOURCE_NAME                  RESOURCE LIMIT
--------------- ------------------------------ -------- ----------
NIKA_PROF       COMPOSITE_LIMIT                KERNEL   DEFAULT
NIKA_PROF       SESSIONS_PER_USER              KERNEL   DEFAULT
NIKA_PROF       CPU_PER_SESSION                KERNEL   DEFAULT
NIKA_PROF       CPU_PER_CALL                   KERNEL   DEFAULT
NIKA_PROF       LOGICAL_READS_PER_SESSION      KERNEL   DEFAULT
NIKA_PROF       LOGICAL_READS_PER_CALL         KERNEL   DEFAULT
NIKA_PROF       IDLE_TIME                      KERNEL   DEFAULT
NIKA_PROF       CONNECT_TIME                   KERNEL   DEFAULT ← PROFILE 作成時に DEFAULT 指定したリソース制限
NIKA_PROF       PRIVATE_SGA                    KERNEL   DEFAULT ← PROFILE 作成時に DEFAULT 指定しなかったリソース制限
NIKA_PROF       FAILED_LOGIN_ATTEMPTS          PASSWORD 1
NIKA_PROF       PASSWORD_LIFE_TIME             PASSWORD 90
NIKA_PROF       PASSWORD_REUSE_TIME            PASSWORD DEFAULT
NIKA_PROF       PASSWORD_REUSE_MAX             PASSWORD DEFAULT
NIKA_PROF       PASSWORD_VERIFY_FUNCTION       PASSWORD DEFAULT
NIKA_PROF       PASSWORD_LOCK_TIME             PASSWORD 30
NIKA_PROF       PASSWORD_GRACE_TIME            PASSWORD 10
16行が選択されました。
※PROFILE 作成時に指定されなかったリソースに対する制限は DEFAULT プロファイルの制限を引き継ぎます。
SQL> SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'NIKA'; ← 現在の状態
USERNAME                       ACCOUNT_STATUS                   LOCK_DAT
------------------------------ -------------------------------- --------
NIKA                           OPEN
SQL> CONNECT NIKA/NIKA9999 ← ユーザ NIKA のパスワードを間違えてみる
ERROR:
ORA-01017: invalid username/password; logon denied
警告: Oracleにはもう接続されていません。
SQL> CONNECT NIKA/NIKA9999 ← 再度試みると、「アカウントがロックされています」
ERROR:
ORA-28000: the account is locked
SQL> CONNECT SYSTEM/MANAGER
接続されました。
SQL> SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'NIKA'; ← ロックされた状態
USERNAME                       ACCOUNT_STATUS                   LOCK_DAT
------------------------------ -------------------------------- --------
NIKA                           LOCKED(TIMED)                    01-06-26
                               (有効期限内のアカウントのロック)
SQL> ALTER USER NIKA ACCOUNT UNLOCK; ← アカウントのロックを手動で解除
ユーザーが変更されました。
SQL> SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'NIKA';
USERNAME                       ACCOUNT_STATUS                   LOCK_DAT
------------------------------ -------------------------------- --------
NIKA                           OPEN
 | 
CREATE PROFILE文によって作成したプロファイルを変更します。
	プロファイルを変更するには ALTER PROFILE 文を使用します。
	
| 【構文】プロファイルの変更 | 
|---|
| ALTER PROFILE プロファイル名 LIMIT リソース名 パラメータ... | 
変更するプロファイル名を指定します。
 
	
| 【例】プロファイルの変更 | 
|---|
| Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production SQL> CONNECT SYSTEM/MANAGER 接続されました。 SQL> ALTER PROFILE NIKA_PROF LIMIT 2 CPU_PER_CALL 5000; プロファイルが変更されました。 /* 1SQL文あたり50秒以上 CPU時間を消費することはできない様に変更。 */ SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE = 'NIKA_PROF'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- ------------------------------ -------- ---------- NIKA_PROF COMPOSITE_LIMIT KERNEL DEFAULT NIKA_PROF SESSIONS_PER_USER KERNEL DEFAULT NIKA_PROF CPU_PER_SESSION KERNEL DEFAULT NIKA_PROF CPU_PER_CALL KERNEL 5000 ← 変更後 NIKA_PROF LOGICAL_READS_PER_SESSION KERNEL DEFAULT NIKA_PROF LOGICAL_READS_PER_CALL KERNEL DEFAULT NIKA_PROF IDLE_TIME KERNEL DEFAULT NIKA_PROF CONNECT_TIME KERNEL DEFAULT NIKA_PROF PRIVATE_SGA KERNEL DEFAULT NIKA_PROF FAILED_LOGIN_ATTEMPTS PASSWORD 1 NIKA_PROF PASSWORD_LIFE_TIME PASSWORD 90 NIKA_PROF PASSWORD_REUSE_TIME PASSWORD DEFAULT NIKA_PROF PASSWORD_REUSE_MAX PASSWORD DEFAULT NIKA_PROF PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT NIKA_PROF PASSWORD_LOCK_TIME PASSWORD 30 NIKA_PROF PASSWORD_GRACE_TIME PASSWORD 10 16行が選択されました。 SQL> ※但し、上記変更は現行セッションには影響しません。 変更後以降に作成されたセッションから有効になります。 また、初期化パラメータ RESOURCE_LIMIT = TRUE になっていないと有効になりません。 SQL> SHOW PARAMETER RESOURCE_LIMIT NAME TYPE VALUE ------------------------------------ ------- ------------------------------ RESOURCE_LIMIT BOOLEAN FALSE SQL> ↑ 今は無効。 SQL> ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; ← 動的に変更してしまう。 システムが変更されました。 SQL> SHOW PARAMETER RESOURCE_LIMIT NAME TYPE VALUE ------------------------------------ ------- ------------------------------ RESOURCE_LIMIT BOOLEAN TRUE SQL> ↑ これで有効になったので、ALTER PROFILE文による変更が反映される。 SQL> | 
CREATE PROFILE文によって作成したプロファイルの削除ができます。
	プロファイルを削除するには DROP PROFILE 文を使用します。
	
| 【構文】プロファイルの削除 | 
|---|
| DROP PROFILE プロファイル名 [CASCADE]; | 
プロファイル名(省略不可)
	削除するプロファイルを指定します。
カスケード(省略可)
	ユーザに割り当てられているプロファイルを削除する場合に指定します。
| 【例】プロファイルの削除 | 
|---|
| Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production SQL>CONNECT SYSTEM/MANAGER ←管理者で接続 接続されました。 SQL> DROP PROFILE NIKA_PROF; ← NIKA_PROF を削除 DROP PROFILE NIKA_PROF * エラー行: 1: エラーが発生しました。 ORA-02382: NIKA_PROFはユーザーに割当てられているためCASCADEなしでは削除できません。 SQL> DROP PROFILE NIKA_PROF CASCADE; ← CASCADE オプションを付けてプロファイルを削除 プロファイルが削除されました。 SQL> SELECT USERNAME, PROFILE FROM DBA_USERS; ← ユーザ NIKA のプロファイルは。。。 USERNAME PROFILE ------------------------------ --------------- SYS DEFAULT SYSTEM DEFAULT IR01 DEFAULT OUTLN DEFAULT DBSNMP DEFAULT NIKA DEFAULT ← デフォルトのプロファイルが割り当てられる。 6行が選択されました。 SQL> | 
| 【おまけ】プロファイルの削除 | 
|---|
| 
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
SQL>CONNECT SYSTEM/MANAGER ← 管理者で接続
接続されました。
SQL> DROP PROFILE DEFAULT; ← DEFAULT プロファイルを削除してみる。
DROP PROFILE DEFAULT
             *
エラー行: 1: エラーが発生しました。
ORA-00931: 識別子がありません。
SQL> DROP PROFILE DEFAULT CASCADE; ← CASCADE オプションを付けて。。。
DROP PROFILE DEFAULT CASCADE
             *
エラー行: 1: エラーが発生しました。
ORA-00931: 識別子がありません。
※ DEFAULT プロファイルは削除できません。
SQL> | 
プロファイルの情報はデータディクショナリで確認することができます。
	プロファイルの情報を確認するには、以下のディクショナリを使用します。
DBA_PROFILES(管理ユーザのみ使用可能)
	システムに存在する全プロファイルの確認に使用します。
	
| 列名 | 意味 | 
|---|---|
| PROFILE | プロファイルの名前 | 
| RESOURCE_NAME | プロファイル中のリソースの名前 | 
| RESOURCE_TYPE | リソースの種類 KERNEL / PASSWORD | 
| LIMIT | 設定されている制限値 | 
2001/08/24 担当:H.O
2003/02/23 更新:H.O