ヘッダーをスキップ
Oracle Databaseセキュリティ・ガイド
11g リリース1(11.1)
E05730-05
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2 Oracle Databaseユーザーのセキュリティの管理

この章の内容は、次のとおりです。

ユーザー・セキュリティの概要

各Oracleデータベースには、有効なデータベース・ユーザーのリストがあります。データベースにアクセスするには、ユーザーは、データベース・アプリケーションを実行し、データベースに定義されている有効なユーザー名を使用して、データベース・インスタンスに接続する必要があります。Oracle Databaseでは、ユーザーのセキュリティを様々な方法で設定できます。ユーザー・アカウントの作成時に、ユーザー・アカウントに対して制限を指定できます。ユーザーのセキュリティ・ドメインの一部として、各ユーザーが使用できる各種のシステム・リソースの容量に制限を設定することもできます。Oracle Databaseには、リソースやセッションなどの情報を検索する際に問い合せることができる一連のデータベース・ビューが用意されています。この章では、プロファイルについても説明します。プロファイルは、ユーザーに適用される属性の集合で、それらの属性を共有する複数ユーザーの中の任意のユーザーに関する単一の参照になります。

ユーザー・セキュリティの別の管理方法は、ユーザー権限とロールを割り当てることです。詳細は、第4章「権限とロール認可の構成」を参照してください。

ユーザー・アカウントの作成

この項の内容は、次のとおりです。

ユーザー・アカウントおよびパスワードの作成と管理のガイドラインは、次の各項を参照してください。

新規ユーザー・アカウントの作成

データベース・ユーザーを作成するには、CREATE USER文を使用します。ユーザーを作成するには、CREATE USERシステム権限が必要です。CREATE USERは強力なシステム権限であるため、通常、この権限を持つユーザーはデータベース管理者またはセキュリティ管理者のみです。

例2-1では、ユーザーを作成し、ユーザー・パスワード、デフォルト表領域、一時セグメントが作成される一時表領域、表領域割当て制限およびプロファイルを指定しています。また、データベース・セッションにログインするための最低限の権限であるCONNECTおよびCREATE SESSIONをユーザーに付与しています。

例2-1 CONNECTおよびCREATE SESSION権限を付与したユーザー・アカウントの作成

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;
GRANT CREATE SESSION TO jward;

passwordを安全なパスワードに置き換えます。詳細は、「パスワードの最低要件」を参照してください。

新しく作成したユーザーは、CREATE SESSIONシステム権限が付与されるまで、データベースに接続できません。そのため、ユーザー・アカウントの作成直後に、GRANT SQL文を使用して、この権限をユーザーに付与します。Oracle Enterprise Managerへのアクセスが必要なユーザーには、SELECT ANY DICTIONARY権限も付与する必要があります。


注意:


セキュリティ管理者は、独自のロールを作成し、必要な権限のみを割り当てる必要があります。たとえば、それまでCONNECT権限を付与されていた多くのユーザーは、CONNECTで提供されていた追加権限を必要とはしていませんでした。そのかわり、実際にはCREATE SESSIONのみが必要であったため、事実、CONNECTが今も保持しているのはこの権限のみです。

組織固有のロールを作成することによって、組織で割り当てる権限を詳細に制御でき、Oracle Databaseが定義するロールが将来のリリースで変更された場合に組織を保護できます。たとえば、CONNECTおよびRESOURCEの各ロールはともに、Oracle Databaseの将来のリリースでは使用不可になる予定です。ロールの作成方法と管理方法は、第4章「権限とロール認可の構成」を参照してください。


ユーザー名の指定

各データベース内のユーザー名は、他のユーザー名およびロールと比較して一意であることが必要です。ユーザーとロールに同じ名前を付けることはできません。また、各ユーザーには対応するスキーマがあります。スキーマ内の各スキーマ・オブジェクトには、必ず一意の名前を指定する必要があります。次の例で、太字のテキストはユーザー名の作成方法を示しています。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

ユーザーへのパスワードの割当て

例2-1では、データベースを使用して新規ユーザーを認証しています。この場合、接続に成功するために、接続ユーザーはデータベースに対して正しいパスワードを指定する必要があります。ユーザーのパスワードを指定するには、CREATE USER文のIDENTIFIED BY句を使用します。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

関連項目:


ユーザーに対するデフォルト表領域の割当て

各ユーザーには、デフォルト表領域が必要です。ユーザーがスキーマ・オブジェクトを作成したときに格納する表領域を指定しない場合、Oracle Databaseはそのオブジェクトをデフォルトのユーザー表領域に格納します。

すべてのユーザーのデフォルト表領域に対するデフォルト設定は、SYSTEM表領域です。ユーザーがオブジェクトを作成せず、オブジェクトを作成するための権限も持っていない場合は、デフォルト設定のままで問題ありません。ただし、任意のタイプのオブジェクトを作成する可能性があるユーザーには、デフォルト表領域(USERS表領域など)を明示的に割り当てる必要があります。SYSTEM以外の表領域を使用すると、同じデータ・ファイルに対するデータ・ディクショナリ・オブジェクトとユーザー・オブジェクト間の競合が解消されます。通常、ユーザー・データはSYSTEM表領域に格納しないでください。

CREATE TABLESPACE SQL文を使用すると、データベースの作成時に、SYSTEM以外の永続的なデフォルト表領域を作成できます。この表領域は、永続オブジェクトに対するデータベースのデフォルトとして使用されます。ユーザー・データとシステム・データを分離すると、SYSTEM表領域に関する問題が発生する可能性が低くなります。この表領域で問題が発生すると、状況によってはデータベース全体が機能しなくなる場合があります。このデフォルト永続表領域は、システム・ユーザーであるSYSSYSTEMおよびOUTLNには使用されません。システム・ユーザーのデフォルト永続表領域はSYSTEMです。デフォルト永続表領域に指定された表領域は削除できません。削除するには、その前に別の表領域をデフォルト永続表領域として指定する必要があります。ALTER TABLESPACE SQL文を使用すると、デフォルト永続表領域を別の表領域に変更できます。これによって、ALTER DDL文のコミット後に作成されたすべてのユーザーまたはオブジェクトが影響を受けることに注意してください。

ユーザー作成時に、そのユーザーのデフォルト表領域を設定しておき、作成後にALTER USER文を使用して変更することもできます。ユーザーのデフォルト表領域を変更すると、設定の変更後に作成されたオブジェクトのみがこの変更の影響を受けます。

ユーザーのデフォルト表領域を指定するときは、その表領域に対する割当て制限もあわせて指定してください。

次のCREATE USER文では、ユーザーjwardのデフォルト表領域はdata_tsであり、その表領域でのjwardの割当て制限は500KBです。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

ユーザーに対する表領域割当て制限の割当て

各ユーザーには、任意の表領域(一時表領域を除く)に対する表領域割当て制限を設定できます。割当て制限による影響は、次のとおりです。

  • 特定タイプのオブジェクトを作成する権限があるユーザーは、指定した表領域内にオブジェクトを作成できます。

  • Oracle Databaseでは、指定した表領域内にあるユーザーのオブジェクトの記憶域に対して割当て可能な領域は、割当て制限以内に制限されます。

デフォルトでは、ユーザーにはデータベース内の表領域に関する割当て制限はありません。ユーザーにスキーマ・オブジェクトを作成する権限がある場合は、必ず割当て制限を設定して、ユーザーがオブジェクトを作成できるようにします。少なくとも、デフォルト表領域に対する割当て制限をユーザーに割り当てます。さらに、オブジェクトの作成が可能な他の表領域に対して追加の割当て制限を割り当てます。

次のCREATE USER文では、test_tsおよびdata_ts表領域に対して次の割当て制限を割り当てています。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

ユーザーの割当て制限では、各表領域の一定量のディスク領域を個別に割り当てるか、またはすべての表領域のディスク領域を無制限に割り当てるかのどちらかを選択できます。一定量の割当て制限を設定すると、ユーザーのオブジェクトによってデータベースの領域が大量に使用されるのを防止できます。

ユーザー表領域の割当て制限は、ユーザーの作成時に設定しますが、作成後に追加または変更できます(USER_TS_QUOTASビューを問い合せることで、既存のユーザーの割当て制限を検索できます)。新しい割当て制限が古い制限値よりも少ない場合は、次の条件が成立します。

  • ユーザーがすでに新しい表領域割当て制限を超過している場合は、これらのオブジェクトをあわせた領域が新しい割当て制限より少なくならないかぎり、その表領域のユーザー・オブジェクトに追加の領域を割り当てることはできません。

  • ユーザーが新しい表領域割当て制限を超過していない場合、つまり表領域内でユーザーのオブジェクトが使用している領域が新しい表領域割当て制限よりも少ない場合は、そのユーザーのオブジェクトに新しい割当て制限までの領域を割り当てることができます。

表領域内にオブジェクトを作成する許可をユーザーから取り消す方法

表領域内にオブジェクトを作成するための許可をユーザーから取り消すには、ALTER USER SQL文を使用してそのユーザーの現行の割当て制限を0(ゼロ)に変更します。割当て制限を0(ゼロ)に変更すると、表領域内のユーザーのオブジェクトはそのまま残りますが、新しいオブジェクトを作成したり、既存のオブジェクトに新たな領域を割り当てることはできません。

ユーザーへのUNLIMITED TABLESPACEシステム権限の付与

データベース内の表領域を無制限に使用することをユーザーに許可するには、そのユーザーにUNLIMITED TABLESPACEシステム権限を付与します。これによって、ユーザーに対して明示的に指定されている表領域割当て制限がすべて置き換えられます。この権限を後で取り消すと、明示的に指定された割当て制限が再び有効になります。この権限は、ロールに対してではなく、ユーザーに対してのみ付与できます。

UNLIMITED TABLESPACEシステム権限を付与する前に、この方法のメリットとデメリットを考慮する必要があります。

メリット

データベースのすべての表領域に無制限にアクセスできる権限を1つの文でユーザーに付与できます。

デメリット

  • この権限によって、そのユーザーに対する明示的な表領域割当て制限がすべて置き換えられます。

  • UNLIMITED TABLESPACEシステム権限を持つユーザーから表領域へのアクセス権を選択的に取り消すことはできません。この権限を取り消した後でのみ、選択的または制限付きアクセス権を付与できます。

ユーザーに対する一時表領域の割当て

各ユーザーには、一時表領域を割り当てる必要があります。ユーザーが一時セグメントを必要とするSQL文を実行すると、このセグメントはそのユーザーの一時表領域に格納されます。これらの一時セグメントは、ソート操作または結合操作の実行時にシステムによって作成されます。一時セグメントは、すべての表領域のリソースに関する権限を持つSYSが所有します。

次の例では、jward一時表領域はtemp_tsです。これは一時セグメントのみを格納するために明示的に作成された表領域です。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

一時表領域を作成するには、CREATE TEMPORARY TABLESPACE SQL文を使用します。

ユーザーの一時表領域を明示的に割り当てない場合、そのユーザーには、データベース作成時に指定された、または作成後にALTER DATABASE文によって指定されたデフォルト一時表領域が割り当てられます。デフォルトの一時表領域が明示的に割り当てられていない場合、デフォルトはSYSTEM表領域またはシステム管理者が設定した別のデフォルト永続表領域になります。ユーザー・データはSYSTEM表領域に格納しないでください。一時表領域として使用する表領域を明示的に割り当てることによって、一時セグメントとそれ以外のタイプのセグメントとの間で発生するファイルの競合が解消されます。


注意:


SYSTEM表領域がローカル管理の場合、ユーザーには特定のデフォルト(ローカル管理)一時表領域を割り当てる必要があります。永続的なローカル管理表領域には、一時オブジェクトを格納できないため、SYSTEM表領域の使用はデフォルトで禁止されます。

ユーザー作成時に、そのユーザーの一時表領域を設定しておき、作成後にALTER USER文を使用して変更できます。 ユーザーSYSとしてログインした場合は、一時表領域の割当て制限および他の領域の割当てを設定できます。(この操作を実行できるのは、ユーザーSYSのみです。これは、一時表領域のすべての領域がユーザーSYSに属しているためです。)個々の一時表領域を割り当てるかわりに、表領域グループを設定することもできます。


関連項目:

  • 『Oracle Database管理者ガイド』の一時表領域に関する項

  • 『Oracle Database管理者ガイド』の複数の一時表領域: 表領域グループの使用に関する項


ユーザーに対するプロファイルの指定

ユーザーの作成時に、プロファイルを指定できます。プロファイルとは、データベース・リソースとそのデータベースへのパスワード・アクセスに関する一連の制限です。プロファイルを指定しない場合、ユーザーにはデフォルト・プロファイルが割り当てられます。

次の例は、ユーザーにプロファイルを割り当てる方法を示しています。

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;

ユーザーに対するデフォルト・ロールの設定

ロールは、関連する権限のグループに名前を付けたもので、ユーザーや他のロールに付与します。デフォルト・ロールは、ユーザーがセッションを作成したときに、自動的にそのユーザーに対して使用可能になります。ユーザーには複数のデフォルト・ロールを割り当てることができますが、割り当てなくてもかまいません。

ユーザーのデフォルト・ロールは、CREATE USER文では設定できません。最初にユーザーを作成したときに、そのユーザーのデフォルト・ロールはALLに設定されます。これによって、その後ユーザーに付与されるロールはすべてデフォルト・ロールになります。ユーザーのデフォルト・ロールを変更するには、ALTER USER文を使用します。次に例を示します。

GRANT USER jward clerk_role;

ALTER USER jward DEFAULT ROLE clerk_role;

ロールをユーザーのデフォルト・ロールにするには、そのロールがユーザーに付与されている必要があります。

ユーザー・アカウントの変更

ユーザーは自分のパスワードを変更できます。ただし、ユーザーのセキュリティ・ドメインの他のオプションを変更するには、ALTER USERシステム権限が必要です。通常は、セキュリティ管理者のみがこのシステム権限を持ちます。これは、この権限によってすべてのユーザーのセキュリティ・ドメインを変更できるためです。この権限には、データベースの任意の表領域に対するユーザーの表領域割当て制限を設定する許可が含まれています。これは、変更を実行するユーザーが、指定した表領域に対する割当て制限を持っていない場合も同じです。

ユーザーのセキュリティ設定を変更するには、ALTER USER SQL文を使用します。ユーザーのセキュリティ設定の変更は、現行セッションではなく、それより後のユーザー・セッションから反映されます。

例2-2に、ALTER USER文を使用してユーザーavyrrosのセキュリティ設定を変更する方法を示します。

例2-2 ユーザー・アカウントの変更

ALTER USER avyrros
 IDENTIFIED EXTERNALLY
 DEFAULT TABLESPACE data_ts
 TEMPORARY TABLESPACE temp_ts
 QUOTA 100M ON data_ts
 QUOTA 0 ON test_ts
 PROFILE clerk;

このALTER USER文によって、ユーザーavyrrosのセキュリティ設定は次のように変更されます。

ユーザー・パスワードの変更

ほとんどのユーザーが、次のようにPASSWORD文を使用して自分のパスワードを変更できます。

PASSWORD andy
Changing password for andy
New password: password
Retype new password: password

ユーザーが自分のパスワードを変更するには、特別な権限(データベースへの接続およびセッションの作成権限以外)は不要です。ユーザーには、自分のパスワードを頻繁に変更することを薦めてください。パスワードを保護する最適な方法に関するガイドラインは、「パスワードの保護に関するガイドライン」を参照してください。ALL_USERSビューを問い合せることで、現行データベース・インスタンスの既存のユーザーを検索できます。

ユーザーは、ALTER USER SQL文を使用して自分のパスワードを変更することもできます。次に例を示します。

ALTER USER andy
 IDENTIFIED BY password

ただし、セキュリティを強化するには、PASSWORD文を使用してアカウントのパスワードを変更します。ALTER USER文では、新規パスワードが画面に表示されるため、他者に見られる可能性があります。PASSWORDコマンドでは新規パスワードが表示されないため、自分のみが把握し、他者に知られることはありません。どちらの場合も、パスワードはネットワーク上で暗号化されます。

ユーザーが認証方式を切り替えるには、PASSWORDALTER USER権限が必要です。通常、この権限を持つのは管理者のみです。


関連項目:


ユーザー・リソース制限の構成

この項の内容は、次のとおりです。

ユーザー・リソース制限の概要

ユーザーのセキュリティ・ドメインの一部として、各ユーザーが使用できる各種のシステム・リソースの容量に制限を設定できます。これにより、CPUタイムなどの貴重なシステム・リソースが無制限に浪費されるのを防止できます。リソース制限を設定するには、データベース・リソース・マネージャを使用します。データベース・リソース・マネージャについては、『Oracle Database管理者ガイド』を参照してください。

このリソース制限機能は、システム・リソースに多額の費用がかかる大規模なマルチ・ユーザー・システムでは非常に有効です。1人以上のユーザーが過度にリソースを使用すると、データベースの他のユーザーに有害な影響を与える可能性があります。シングル・ユーザー・データベースや小規模なマルチ・ユーザー・データベースの場合は、ユーザーがシステム・リソースを消費しても影響は少ないため、システム・リソース機能はそれほど重要ではありません。

ユーザーのリソース制限は、データベース・リソース・マネージャを使用して管理します。パスワード管理の作業環境は、ユーザーごとに個別にプロファイルを使用して設定するか、または多数のユーザー用のデフォルト・プロファイルを使用して設定できます。それぞれのOracleデータベースに指定できるプロファイルの数に、制限はありません。Oracle Databaseでは、セキュリティ管理者が、プロファイルによるリソース制限の規定を全体的に使用可能または使用禁止に設定できます。

リソース制限を設定すると、ユーザーによるセッション作成時に、パフォーマンスがわずかに低下します。これは、各ユーザーがデータベースに接続した時点で、そのユーザーのすべてのリソース制限データがロードされるためです。


関連項目:


リソース管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

システム・リソースのタイプと制限

Oracle Databaseでは、CPUタイムと論理読取りを含め、いくつかのタイプのシステム・リソースの使用を制限できます。一般に、それぞれのリソースは、セッション・レベル、コール・レベル、またはその両方で制御できます。次の各項で詳細を説明します。

ユーザー・セッション・レベルの制限

ユーザーがデータベースに接続するたびに、セッションが作成されます。それぞれのセッションは、Oracle Databaseを実行するコンピュータのCPUタイムとメモリーを使用します。複数のリソース制限をセッション・レベルで設定できます。

ユーザーがセッション・レベルのリソース制限を超えると、現行の文は終了(ロールバック)し、セッションの制限に達したことを示すメッセージが戻されます。この時点では、カレント・トランザクション内のそれ以前のすべての文の結果はそのまま残っています。ユーザーが実行できる操作は、COMMITROLLBACKまたは接続の切断(この場合、カレント・トランザクションはコミットされます)のみです。それ以外の操作を実行すると、エラーが発生します。トランザクションがコミットまたはロールバックされた後も、カレント・セッションではユーザーはどんな作業も完了できません。

データベース・コール・レベルの制限

ユーザーがSQL文を実行するたびに、Oracle Databaseでは、いくつかのステップが実行され文が処理されます。この処理では、データベースに対して複数のコールが異なる実行フェーズの一部として発行されます。1回のコールで過度にシステムが使用されないように、Oracle Databaseでは、複数のリソース制限をコール・レベルで設定できます。

ユーザーがコール・レベルのリソース制限を超えると、Oracle Databaseは文の処理を停止してその文をロールバックし、エラーを戻します。ただし、カレント・トランザクションのそれ以前の文の結果はそのまま残り、そのユーザー・セッションは接続されたままになります。

CPUタイムの制限

SQL文やその他のタイプのコールがOracle Databaseに発行されると、そのコールを処理するために一定量のCPUタイムが必要になります。平均的なコールであれば、わずかなCPUタイムですみます。ただし、大量のデータや冗長な問合せを伴うSQL文はCPUタイムを大量に使用することがあるため、他の処理に使用できるCPUタイムが少なくなります。

CPUタイムが無制限に消費されないようにするため、1回のコール当たりのCPUタイムと、1つのセッション中にOracle Databaseコールに使用されるCPUタイムの合計に対して、固定した制限または動的な制限を設定できます。これらの制限は、コールやセッションに使用される1/100秒(0.01秒)単位のCPUタイムで設定し、測定されます。

論理読取りの制限

入出力(I/O)は、データベース・システムで最もリソースの使用量が多い操作の1つです。I/Oを集中的に実行するSQL文は、メモリーとディスクの使用を独占することがあるため、他のデータベース操作がこれらのリソースをめぐって競合する原因になる可能性があります。

単一の原因による過度のI/Oが発生しないようにするために、1コール当たりおよび1セッション当たりの論理データ・ブロック読取り数を制限できます。論理データ・ブロック読取りには、メモリーとディスクの両方からの論理データ・ブロック読取りが含まれます。これらの制限は、1コールまたは1セッション中に実行されるブロック読取りの数として設定し、測定されます。

その他のリソース制限

Oracle Databaseでは、いくつかのその他のセッション・レベルのリソース制限が提供されています。

  • ユーザー当たりの同時実行セッション数の制限。 各ユーザーは、事前に定義された数まで同時実行セッションを作成できます。

  • セッションのアイドル時間の制限。 1つのセッションでのコール間の時間がアイドル制限時間に達すると、カレント・トランザクションがロールバックされてセッションは終了し、そのセッションのリソースはシステムに戻されます。次のコールは、ユーザーがインスタンスから切断されたことを示すエラーを受け取ります。この制限は、分単位の経過時間として設定します。


    注意:


    セッションがアイドル時間の制限を超えたために終了すると、その少し後に、終了したセッションの後処理としてプロセス・モニター(PMON)・バックグラウンド・プロセスがクリーン・アップを実行します。PMONがこのプロセスを完了するまでは、終了したセッションも、セッションまたはユーザー・レベルのリソース制限に加算されます。

  • セッション当たりの経過接続時間の制限。 セッションの持続時間が経過制限時間を超えると、カレント・トランザクションがロールバックされてセッションが削除され、そのセッションのリソースがシステムに戻されます。この制限は、分単位の経過時間として設定します。


    注意:


    Oracle Databaseは、経過アイドル時間や経過接続時間を絶えず監視しているわけではありません。絶えず監視した場合、システム・パフォーマンスが低下します。そのかわり数分ごとにチェックします。このため、Oracle Databaseがこの制限を規定してからセッションを終了させるまでの間に、セッションはこの制限をわずかに(5分など)超える可能性があります。

  • セッションのプライベート・システム・グローバル領域(SGA)(プライベートSQL領域に使用)の容量の制限。 この制限が重要になるのは、共有サーバーの構成を使用するシステムの場合のみです。それ以外のシステムの場合、プライベートSQL領域はプログラム・グローバル領域(PGA)内にあります。この制限は、インスタンスのSGAに使用するメモリーのバイト数として設定します。KBまたはMBで指定するには、KまたはMの文字を使用します。


    関連項目:


    リソース制限を使用可能および使用禁止にする手順は、次を参照してください。

プロファイルのリソース制限の値の決定

プロファイルを作成し、そのプロファイルに含めるリソース制限を決定する前に、各リソース制限について適切な値を決定する必要があります。これらの値は、典型的なユーザーが実行する操作のタイプを基準として決定できます。たとえば、あるクラスのユーザーが通常は大量の論理データ・ブロック読取りを実行しない場合は、ALTER RESOURCE COST SQL文を使用して、LOGICAL_READS_PER_SESSION設定を控えめに設定します。

通常、ユーザー・プロファイルの適切なリソース制限値を決定するには、それぞれのタイプのリソースの使用状況について履歴情報を収集するのが最善です。たとえば、データベース管理者やセキュリティ管理者は、AUDIT SESSION句を使用して、CONNECT_TIMEおよびLOGICAL_READS_PER_SESSIONの制限値についての情報を収集できます。

その他の制限値の統計情報は、Oracle Enterprise Manager(またはSQL*Plus)のモニター機能、特に統計モニターを使用して収集できます。


関連項目:


プロファイルによるリソースの管理

プロファイルとは、ユーザーのデータベース使用とインスタンス・リソースを制限する一連のリソース制限およびパスワード・パラメータに名前を付けたものです。ユーザーごとのプロファイルの割当て、およびすべてのユーザーに対するデフォルト・プロファイルの割当てが可能です。各ユーザーに割り当てることができるプロファイルは1つのみで、新しいプロファイルを作成すると、旧バージョンと置き換えられます。

ユーザー・プロファイルを作成して管理する必要があるのは、リソース制限がデータベースのセキュリティ・ポリシーの要件である場合のみです。プロファイルを使用するには、最初にデータベース内のユーザーの関連タイプを分類します。ロールを使用して関連ユーザーの権限を管理するのと同様に、プロファイルを使用して関連ユーザーのリソース制限を管理します。データベース内のすべてのタイプのユーザーを含めるために必要なプロファイル数を決定してから、プロファイルごとに適切なリソース制限を決定します。

一般的に、プロファイルとはユーザーに適用される属性の集合で、それらの属性を共有する複数ユーザーの中の任意のユーザーに関する単一の参照になります。Oracle Internet Directoryのユーザー・プロファイルには、各ユーザーのディレクトリ使用と認証に関連した属性が含まれています。同様に、Oracle Label Securityのプロファイルには、Oracle Label Securityのユーザー管理や操作管理に役立つ属性が含まれています。プロファイル属性にはシステム・リソースに関する制限を含めることができます。データベース・リソース・マネージャを使用すると、これらのタイプのリソース制限を設定できます。

プロファイルのリソース制限が適用されるのは、対応するデータベースのリソース制限が使用可能な場合のみです。このリソース制限が使用可能になるのは、データベースの起動前(RESOURCE_LIMIT初期化パラメータを使用)またはオープン中(ALTER SYSTEM文を使用)のいずれかです。

パスワード・パラメータはプロファイル内にありますが、RESOURCE_LIMITまたはALTER SYSTEMの影響は受けず、パスワード管理は常に使用可能です。Oracle Databaseでは、主にデータベース・リソース・マネージャによって、リソースの割当てと制限が処理されます。


関連項目:


プロファイルの作成

認可されたデータベース・ユーザーは、プロファイルの作成、ユーザーへの割当て、変更および削除を(CREATE USERまたはALTER USER文を使用して)随時実行できます。プロファイルは、ロールや他のプロファイルではなく、ユーザーにのみ割り当てることができます。プロファイルの割当ては現行のセッションには影響を与えず、それより後のセッションにのみ有効です。現行のプロファイルに関する情報を検索するには、DBA_PROFILESビューを問い合せます。


関連項目:


プロファイルの削除

プロファイルを削除するには、DROP PROFILEシステム権限が必要です。プロファイル(デフォルト・プロファイル以外)を削除するには、SQL文DROP PROFILEを使用します。現在ユーザーに割り当てられているプロファイルを正常に削除するには、CASCADEオプションを使用します。

次の文は、プロファイルclerkを削除します。このプロファイルがユーザーに割り当てられていても削除されます。

DROP PROFILE clerk CASCADE;

削除するプロファイルに現在割り当てられているユーザーは、自動的にDEFAULTプロファイルに割り当てられます。DEFAULTプロファイルは削除できません。プロファイルを削除しても、現在アクティブなセッションには影響を与えません。プロファイルの削除後に作成されたセッションのみが、変更されたプロファイル割当てを使用します。

ユーザー・アカウントの削除

ユーザー・アカウントを削除すると、そのユーザー・アカウントおよび対応するスキーマがデータ・ディクショナリから削除されます。また、ユーザーのスキーマ内にスキーマ・オブジェクトがある場合は、そのすべてのオブジェクトがただちに削除されます。


注意:

  • ユーザーのスキーマとそれに対応するオブジェクトは残したままで、データベースへのアクセスを拒否する場合は、そのユーザーからCREATE SESSION権限を取り消してください。

  • SYSユーザーまたはSYSTEMユーザーは削除しないでください。これらのユーザーを削除すると、データベースが破損します。


現在データベースに接続されているユーザーは削除できません。接続中のユーザーを削除するには、最初にKILL SESSION句を指定したSQL文ALTER SYSTEMを使用して、そのユーザーのセッションを停止する必要があります。V$SESSIONビューを問い合せることで、セッションID(SID)を検索できます。

例2-3に、V$SESSIONを問い合せる方法を示し、ユーザーANDYのセッションID、シリアル番号およびユーザー名を表示します。

例2-3 ユーザーのセッションIDに関するV$SESSIONの問合せ

SELECT SID, SERIAL#, USERNAME FROM V$SESSION;

    SID         SERIAL#     USERNAME
------- --------------- ----------------------
    127          55234      ANDY
...

例2-4に、ユーザーandyのセッションを停止する方法を示します。

例2-4 ユーザー・セッションの削除

ALTER SYSTEM KILL SESSION '127, 55234';


データベースからユーザーを削除するには、DROP USER文を使用します。ユーザーとそのユーザーのスキーマ・オブジェクト(ある場合)をすべて削除するには、DROP USERシステム権限が必要です。DROP USERシステム権限は強力な権限であるため、通常はセキュリティ管理者のみがこの権限を持ちます。

ユーザーのスキーマに依存型のスキーマ・オブジェクトが含まれている場合に、ユーザーと対応付けられているすべてのオブジェクト、およびそのユーザーの表に依存している外部キーをすべて削除するには、CASCADEオプションを使用します。CASCADEを指定していない場合は、ユーザーのスキーマに依存型のオブジェクトが含まれていると、エラー・メッセージが戻され、ユーザーは削除されません。

スキーマにオブジェクトが含まれているユーザーを削除する場合は、事前にどのオブジェクトがスキーマに含まれているかを十分に調査し、削除による影響を確認しておく必要があります(DBA_OBJECTSビューを問い合せることで、特定のユーザーが所有するオブジェクトを検索できます)。

例2-5に、ユーザーandyが所有するオブジェクトを検索する方法を示します。

例2-5 ユーザーが所有するオブジェクトの検索

SELECT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OWNER LIKE 'ANDY';

(ユーザー名を大文字で入力します。)事前に認識できない連鎖的な影響に注意してください。たとえば、表を所有するユーザーを削除する場合は、ビューまたはプロシージャがその表に依存していないかどうかを確認してください。

例2-6では、ユーザーandyとそれに対応付けられたすべてのオブジェクト、およびandyが所有する表に依存するすべての外部キーを削除します。

例2-6 ユーザー・アカウントの削除

DROP USER andy CASCADE;

関連項目:


セッション終了の詳細は、『Oracle Database管理者ガイド』を参照してください。

データベース・ユーザーとプロファイルに関する情報の検索

この項の内容は、次のとおりです。

データ・ディクショナリ・ビューを使用したユーザーとプロファイルに関する情報の検索

表2-1に、データベース・ユーザーとプロファイルに関する情報が含まれたデータ・ディクショナリ・ビューを示します。これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

表2-1 ユーザーとプロファイルに関する情報が含まれたデータ・ディクショナリ・ビュー

ビュー 説明

ALL_OBJECTS

現行ユーザーがアクセス可能なすべてのオブジェクトが表示されます。

ALL_USERS

現行ユーザーに対して表示可能なユーザーがリストされますが、それらの記述は表示されません。

DBA_PROFILES

すべてのプロファイルとそれぞれの制限が表示されます。

DBA_TS_QUOTAS

ユーザーの表領域割当て制限が表示されます。

DBA_OBJECTS

データベース内のすべてのオブジェクトが表示されます。

DBA_USERS

データベースのすべてのユーザーの記述が表示されます。

DBA_USERS_WITH_DEFPWD

デフォルト・パスワードが設定されているすべてのユーザー・アカウントがリストされます。

PROXY_USERS

他のユーザーの識別情報を引き継ぐことができるユーザーの記述が表示されます。

RESOURCE_COST

セッション当たりのCPU、セッション当たりの読取り、接続時間およびSGAの観点から各リソースのコストがリストされます。

USER_PASSWORD_LIMITS

ユーザーに割り当てられているパスワード・プロファイル・パラメータが表示されます。

USER_RESOURCE_LIMITS

現行ユーザーのリソース制限が表示されます。

USER_TS_QUOTAS

ユーザーの表領域割当て制限が表示されます。

USER_OBJECTS

現行ユーザーが所有するすべてのオブジェクトが表示されます。

USER_USERS

現行ユーザーの記述のみが表示されます。

V$SESSION

現行セッションごとに、ユーザー名を含んだセッション情報が表示されます。

V$SESSTAT

ユーザー・セッションの統計がリストされます。

V$STATNAME

V$SESSTATビューに表示される統計のデコードされた統計名が表示されます。


次の各項では、これらのビューの使用例を示します。各例では、次の文がすでに実行されていることを前提としています。

CREATE PROFILE clerk LIMIT
    SESSIONS_PER_USER 1
    IDLE_TIME 30
    CONNECT_TIME 600;

CREATE USER jfee
    IDENTIFIED BY password
    DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp_ts
    QUOTA 500K ON users
    PROFILE clerk;

CREATE USER dcranney
    IDENTIFIED BY password
    DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp_ts
    QUOTA unlimited ON users;

CREATE USER userscott
     IDENTIFIED BY password;

すべてのユーザーとその関連情報のリスト

データベースに定義されているすべてのユーザーとそのユーザーに関連する情報を検索するには、DBA_USERSビューを問い合せます。DBA_USERSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

次に例を示します。

SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS;

USERNAME        PROFILE         ACCOUNT_STATUS
--------------- --------------- ---------------
SYS             DEFAULT         OPEN
SYSTEM          DEFAULT         OPEN
USERSCOTT       DEFAULT         OPEN
JFEE            CLERK           OPEN
DCRANNEY        DEFAULT         OPEN

すべての表領域割当て制限のリスト

DBA_TS_QUOTASビューを使用すると、各ユーザーに明示的に割り当てられている表領域割当て制限がすべてリストされます。(このビューの詳細は、『Oracle Databaseリファレンス』を参照してください)。次に例を示します。

SELECT * FROM DBA_TS_QUOTAS;

TABLESPACE    USERNAME    BYTES     MAX_BYTES    BLOCKS    MAX_BLOCKS
----------    ---------  --------   ----------   -------   ----------
USERS         JFEE              0       512000         0          250
USERS         DCRANNEY          0           -1         0           -1

固有の割当て制限が割り当てられている場合は、正確な数値がMAX_BYTES列に示されます。この数値は常にデータベース・ブロック・サイズの倍数となるため、倍数でない表領域割当て制限を指定すると、適切な値に切り上げられます。無制限割当ての場合は、-1が表示されます。

すべてのプロファイルと割り当てられている制限のリスト

DBA_PROFILESビューには、データベース内のすべてのプロファイルと各プロファイル内の各制限に対応する設定がリストされます。(このビューの詳細は、『Oracle Databaseリファレンス』を参照してください)。次に例を示します。

SELECT * FROM DBA_PROFILES
   ORDER BY PROFILE;

PROFILE             RESOURCE_NAME              RESOURCE   LIMIT
-----------------   ---------------            ---------- --------------
CLERK               COMPOSITE_LIMIT            KERNEL     DEFAULT
CLERK               FAILED_LOGIN_ATTEMPTS      PASSWORD   DEFAULT
CLERK               PASSWORD_LIFE_TIME         PASSWORD   DEFAULT
CLERK               PASSWORD_REUSE_TIME        PASSWORD   DEFAULT
CLERK               PASSWORD_REUSE_MAX         PASSWORD   DEFAULT
CLERK               PASSWORD_VERIFY_FUNCTION   PASSWORD   DEFAULT
CLERK               PASSWORD_LOCK_TIME         PASSWORD   DEFAULT
CLERK               PASSWORD_GRACE_TIME        PASSWORD   DEFAULT
CLERK               PRIVATE_SGA                KERNEL     DEFAULT
CLERK               CONNECT_TIME               KERNEL     600
CLERK               IDLE_TIME                  KERNEL     30
CLERK               LOGICAL_READS_PER_CALL     KERNEL     DEFAULT
CLERK               LOGICAL_READS_PER_SESSION  KERNEL     DEFAULT
CLERK               CPU_PER_CALL               KERNEL     DEFAULT
CLERK               CPU_PER_SESSION            KERNEL     DEFAULT
CLERK               SESSIONS_PER_USER          KERNEL     1
DEFAULT             COMPOSITE_LIMIT            KERNEL     UNLIMITED
DEFAULT             PRIVATE_SGA                KERNEL     UNLIMITED
DEFAULT             SESSIONS_PER_USER          KERNEL     UNLIMITED
DEFAULT             CPU_PER_CALL               KERNEL     UNLIMITED
DEFAULT             LOGICAL_READS_PER_CALL     KERNEL     UNLIMITED
DEFAULT             CONNECT_TIME               KERNEL     UNLIMITED
DEFAULT             IDLE_TIME                  KERNEL     UNLIMITED
DEFAULT             LOGICAL_READS_PER_SESSION  KERNEL     UNLIMITED
DEFAULT             CPU_PER_SESSION            KERNEL     UNLIMITED
DEFAULT             FAILED_LOGIN_ATTEMPTS      PASSWORD   10
DEFAULT             PASSWORD_LIFE_TIME         PASSWORD   180
DEFAULT             PASSWORD_REUSE_MAX         PASSWORD   UNLIMITED
DEFAULT             PASSWORD_LOCK_TIME         PASSWORD   1
DEFAULT             PASSWORD_GRACE_TIME        PASSWORD   7
DEFAULT             PASSWORD_VERIFY_FUNCTION   PASSWORD   UNLIMITED
DEFAULT             PASSWORD_REUSE_TIME        PASSWORD   UNLIMITED
32 rows selected.

各ユーザー・セッションのメモリー使用の表示

各ユーザー・セッションのメモリー使用を検索するには、V$SESSIONビューを問い合せます(このビューの詳細は、『Oracle Databaseリファレンス』を参照してください)。次の問合せは、現行セッションをすべてリストし、各セッションのOracle Databaseユーザーとユーザー・グローバル領域(UGA)の現在のメモリー使用を示します。

SELECT USERNAME, VALUE ││ 'bytes' "Current UGA memory"
   FROM V$SESSION sess, V$SESSTAT stat, V$STATNAME name
WHERE sess.SID = stat.SID
   AND stat.STATISTIC# = name.STATISTIC#
   AND name.NAME = 'session uga memory';

USERNAME                       Current UGA memory
------------------------------ ---------------------------------------------
                               18636bytes
                               17464bytes
                               19180bytes
                               18364bytes
                               39384bytes
                               35292bytes
                               17696bytes
                               15868bytes
USERSCOTT                      42244bytes
SYS                            98196bytes
SYSTEM                         30648bytes

11 rows selected.

インスタンスの起動以降、各セッションに割り当てられた最大のUGAメモリーを表示するには、この問合せの'session uga memory''session uga memory max'に置き換えてください。