プライマリ・コンテンツに移動
Oracle® Databaseセキュリティ・ガイド
11gリリース2 (11.2)
B56285-13
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

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

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

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

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

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

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

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

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

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

例2-1 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が定義するロールが将来のリリースで変更された場合に組織を保護できます。ロールの作成方法と管理方法は、第4章「権限とロール認可の構成」を参照してください。


ユーザー名の指定

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

ユーザーjwardはデータベースに大文字で格納されます。次に例を示します。

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
 CONTAINER = CURRENT;
SELECT USERNAME FROM ALL_USERS;

USERNAME
---------
JWARD
...

しかし、ユーザー名を二重引用符で囲むと、このユーザー名は名前に使用した大/小文字の区別を使用して格納されます。例:

CREATE USER "jward" IDENTIFIED BY password;

そのため、ALL_USERSデータ・ディクショナリ・ビューを問い合せると、ユーザー・アカウントが作成に使用した大/小文字を使用して格納されていることがわかります。

SELECT USERNAME FROM ALL_USERS;

USERNAME
---------
jward
...

ユーザーJWARDとユーザーjwardは、どちらも別々のユーザー・アカウントとしてデータベースに格納されています。後で、二重引用符を使用して作成したユーザーを変更または削除する場合は、そのユーザー名を二重引用符で囲む必要があります。

例:

DROP USER "jward";

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

例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;

関連項目:


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

各ユーザーには、デフォルト表領域が必要です。スキーマ・オブジェクトがユーザーのスキーマ内に作成され、かつそのDDL文でそのオブジェクトを格納する表領域が指定されていない場合、そのオブジェクトはユーザーのデフォルト表領域に格納されます。

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

CREATE TABLESPACE SQL文を使用して、データベースの作成時に、データベースの永続オブジェクトのデフォルトとして使用される、SYSTEM以外のデフォルト永続表領域を作成できます。ユーザー・データをシステム・データと区切ることにより、状況次第ではデータベース全体が機能不全になる場合もある、SYSTEM表領域に関する問題が生じる可能性を減らすことができます。このデフォルトの永続表領域は、システム・ユーザー、つまりデフォルトの永続表領域がSYSTEMであるSYSSYSTEM、およびOUTLNが使用するものではありません。デフォルト永続表領域として指定されている表領域は削除できません。目標を達成するためには、最初にデフォルトの永続表領域として他の表領域を指定する必要があります。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;

ユーザーの割当て制限では、各表領域の一定量のディスク領域を個別に割り当てるか、またはすべての表領域のディスク領域を無制限に割り当てるかのどちらかを選択できます。一定量の割当て制限を設定すると、ユーザーのオブジェクトによってデータベースの領域が大量に使用されるのを防止できます。表領域に割り当てることができる最大領域は2 TBです。より多くの領域が必要な場合は、QUOTA句にUNLIMITEDを指定します。

ユーザーの表領域に対する割当て制限は、ユーザーを作成するときに割り当てることができ、後で割当て制限の追加または変更もできます。(USER_TS_QUOTASビューを問い合せることで、既存ユーザーの割当て制限を確認できます。)新しい割当て制限が古い割当て制限より少ない場合は、次の状況が当てはまります。

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

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

表領域でのユーザー・オブジェクトに対する割当て限度の制限

表領域内のユーザー・オブジェクトの割当て制限を制限するには、ALTER USER SQL文を使用してユーザーの現在の割当て制限を0 (ゼロ)に変更します。ゼロの割当て制限が割り当てられると、表領域内のユーザーのオブジェクトはそのまま残り、ユーザーは引き続き新規オブジェクトを作成できますが、既存のオブジェクトには新しい領域が割り当てられなくなります。たとえば、このユーザーの既存の表の1つにデータを挿入することはできません。操作は失敗し、 ORA-1536表に対する領域割当て制限を使い果たしました。エラーが発生します。

ユーザーへの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文を使用して変更できます。個々の一時表領域を割り当てるかわりに、表領域グループを設定することもできます。


関連項目:

  • 『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文を使用したユーザー・アカウントの変更

ユーザーのセキュリティ設定を変更するには、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のセキュリティ設定は次のように変更されます。

  • 認証方式は、ユーザーavyrrosのオペレーティング・システム・アカウントが使用されます。

  • ユーザーAVYRROSのデフォルト表領域と一時表領域が明示的に設定されます。

  • ユーザーavyrrosDATA_TS表領域に対する割当て制限が100MBになります。

  • ユーザーavyrrostest_tsに対する割当て制限が取り消されます。

  • ユーザーavyrrosclerkプロファイルに割り当てられます。

SYS以外のユーザー・パスワードの変更

ほとんどのユーザーが、次のように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権限が必要です。通常、この権限を持つのは管理者のみです。


関連項目:


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

SYSユーザーのパスワードを変更する場合は、 ORAPWDコマンドライン・ユーティリティを使用して、使用するパスワードが含まれたパスワード・ファイルを新規作成する必要があります。ALTER USER文やPASSWORDコマンドを使用したSYSユーザー・パスワードの変更はしないでください。次のことに注意してください。

  • SYSユーザー・アカウントは、ほとんどの内部再帰的SQLが使用します。そのため、ALTER USER文を使用してこのパスワードを変更しようとするときにデータベースがオープンしていると、デッドロックが生じる可能性があります。

  • ALTER USERを使用してSYSユーザー・パスワードを変更しようとする場合に、インスタンス初期化パラメータREMOTE_LOGIN_PASSWORDFILESHAREDに設定されていると、SYSパスワードを変更できません。ALTER USER文は、ORA-28046: SYSのパスワードは変更できませんのエラーで失敗します。

例2-3では、ORAPWDを使用して新しいSYSパスワードが含まれたパスワード・ファイルを作成する方法を示しています。この例では、新規パスワードはorapworclという名前のパスワード・ファイルに格納されます。(このパスワード・ファイルがすでに存在する場合は、 OPW-00005: 同一名のファイルがあります。 - 削除または名前を変更してください。のエラーにより他の名前を選択するように警告されます。既存のパスワード・ファイルを上書きする場合は、force=y引数をORAPWDコマンドに追加してください。)

例2-3 ORAPWDを使用したSYSユーザー・パスワードの変更

orapwd file='orapworcl'
Enter password for SYS: new_password

関連項目:

orapwdコマンド構文と引数の詳細は、『Oracle Database管理者ガイド』を参照してください。

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

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

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

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

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

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

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


関連項目:

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

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

Oracle Databaseでは、CPUタイムや論理読取りなど様々なタイプのシステム・リソースの使用を制限できます。一般にこれらのリソースの各々を、セッション・レベル、コール・レベル、または両方のレベルで制御できます。これを次のセクションで説明します。

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

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

ユーザーがセッション・レベルのリソース限度を超えると、Oracle Databaseは現在の文を終了(ロールバック)して、セッション限度に達したことを示すメッセージを返します。この時点で、カレント・トランザクションのそれ以前の文のすべてがそのまま残り、ユーザーが実行できる操作のみが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プロファイルは削除できません。プロファイルを削除しても、現在アクティブなセッションには影響を与えません。プロファイルの削除後に作成されたセッションのみが、変更されたプロファイル割当てを使用します。

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

ユーザー・アカウントを削除すると、Oracle Databaseではこのユーザー・アカウントおよび対応するスキーマがデータ・ディクショナリから削除されます。さらに、ユーザー・スキーマに含まれているすべてのスキーマ・オブジェクトも(存在する場合)削除されます


注意:

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

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


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

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

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

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

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

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

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

ALTER SYSTEM KILL SESSION '127, 55234';

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

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

スキーマ内にオブジェクトを格納しているユーザーを削除する前に、スキーマ内のオブジェクトおよびそれらを削除する場合の影響を徹底的に調べます。DBA_OBJECTSビューを問い合せると、特定のユーザーが所有しているオブジェクトを確認できます。

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

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

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

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

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

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

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, AUTHENTICATION_TYPE FROM DBA_USERS;
 
USERNAME        PROFILE         ACCOUNT_STATUS   AUTHENTICATION_TYPE
--------------- --------------- ---------------  -------------------
SYS             DEFAULT         OPEN             PASSWORD
SYSTEM          DEFAULT         OPEN             PASSWORD
USERSCOTT       DEFAULT         OPEN             PASSWORD
JFEE            CLERK           OPEN             GLOBAL
DCRANNEY        DEFAULT         OPEN             EXTERNAL 

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

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_PROFILEビューには、データベース内のすべてのプロファイル、および各プロファイルの制限ごとの関連設定がリストされます。(このビューの詳細は、『Oracle Databaseリファレンス』を参照してください)。例:

SELECT * FROM DBA_PROFILES ORDER BY PROFILE;

PROFILE             RESOURCE_NAME              RESOURCE_TYPE  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. 

デフォルト・プロファイル値を検索するには、次の問合せを実行します。

SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT';

PROFILE             RESOURCE_NAME              RESOURCE_TYPE  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       10
DEFAULT             PASSWORD_LIFE_TIME         PASSWORD       180
DEFAULT             PASSWORD_REUSE_TIME        PASSWORD       UNLIMITED
DEFAULT             PASSWORD_REUSE_MAX         PASSWORD       UNLIMITED
DEFAULT             PASSWORD_VERIFY_FUNCTION   PASSWORD       NULL
DEFAULT             PASSWORD_LOCK_TIME         PASSWORD       1
DEFAULT             PASSWORD_GRACE_TIME        PASSWORD       7

16 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'に置き換えてください。