プライマリ・コンテンツに移動
Oracle® Databaseセキュリティ・ガイド
12c リリース1 (12.1)
B71285-10
目次へ移動
目次
索引へ移動
索引

前
次

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

パスワード作成時に制限を適用するなど、Oracle Databaseユーザーのセキュリティは様々な方法で管理できます。

内容は次のとおりです。

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

厳密なパスワードおよびユーザー用の特別な制限を指定することで、ユーザー・アカウントを保護できます。

各Oracleデータベースには、有効なデータベース・ユーザーのリストがあります。データベースにアクセスするには、ユーザーは、データベース・アプリケーションを実行し、データベースに定義されている有効なユーザー名を使用して、データベース・インスタンスに接続する必要があります。

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

関連項目:

「権限とロール認可の構成」に、ユーザー権限およびロールを割り当ててユーザー・セキュリティも管理する方法を示します

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

プロファイル、デフォルト・ロール、表領域制限など、ユーザー・アカウントに制限を設定できます。

内容は次のとおりです。

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

共通ユーザーおよびローカル・ユーザーについて

マルチテナント環境では、共通ユーザーはCDB全体に対するアクセス権を持ち、ローカル・ユーザーはPDB固有のユーザーです。

内容は次のとおりです。

関連項目:

共通ユーザーについて

マルチテナント環境では、共通ユーザーのIDおよびパスワードは、ルートおよび各プラガブル・データベース(PDB)で認識されます。

共通ユーザーは、ルートに接続して操作を実行できます。共通ユーザーに適切な権限がある場合、ローカル・ユーザーへの権限の付与など、PDBで操作を実行できます。

共通ユーザーは、PDBの接続および切断、状態の変更、マルチテナント・コンテナ・データベース(CDB)の一時表領域の指定など、ルートまたはPDBに固有の管理タスクを実行できます。適切な権限を持つ共通ユーザーのみ、CDBに属するコンテナ間を操作できます。

たとえば、共通ユーザーは複数のPDBで次の操作を実行できます。

  • 共通ユーザーまたは共通ロールへの権限の付与

  • CDB全体に適用するリカバリ句を指定するALTER DATABASE文の実行

  • ルートへの接続中に指定されたPDBの状態を変更するALTER PLUGGABLE DATABASE文の実行。PDBに接続されるローカル・ユーザーは、状態、指定された適切な権限も変更できます。

Oracleから提供されるSYSおよびSYSTEMなどのすべての管理ユーザー・アカウントは共通ユーザーで、CDBを操作できます。共通ユーザーは、別のPDBの異なる権限を持つことができます。たとえば、共通ユーザーSYSTEMは、PDB間を切り替えて、現在のPDBのSYSTEMに付与されている権限を使用できます。ただし、PDBのいずれかでOracle Database Vaultが有効な場合、このPDBに接続している間は、ユーザー・アカウントを作成できないSYSTEMなどのDatabase Vault制限が共通SYSTEMユーザーに適用されます。(Oracleから提供される共通ユーザーの権限を変更することはお薦めしません。ただし、コンテナごとに、ユーザー作成の共通ユーザーに異なる権限をローカルで付与することはできます。)

関連項目:

PDBへの接続による共通ユーザーへの影響

CDB以外をPDBとしてCDBに差し込むと、Oracle付属の管理アカウント、ユーザー作成アカウントおよびそれらの権限に影響があります。

次のアクションが実行されます。

  • Oracleから提供される管理アカウントが既存の共通ユーザー・アカウントにマージされます。

  • 既存の共通ユーザー・アカウントのパスワードは、CDB以外のアカウントのパスワードよりも優先されます。

  • 元のCDB以外のユーザー・アカウントの権限を変更した場合、これらの権限は保存されますが、ローカルに付与された権限としてCDBにPDBを接続した場合に作成されたPDBにのみ適用されます。たとえば、ユーザーSYSTEMにCDB以外のdb1hr_mgrと呼ばれるロールを付与したとします。db1データベースがCDBに追加された後、SYSTEMは、他のPDBではなくdb1 PDBのhr_mgrロールのみ使用できます。

共通ユーザーを格納するPDBをCDBに接続する場合は、次のアクションが発生します。

  • このPDBの共通ユーザー・アカウントで、SET CONTAINER権限を含む、付与されている可能性がある共通付与された権限が失われます。

  • ターゲットCDBに共通ユーザーが存在し、新しく接続されたPDBの共通ユーザーと同じ名前である場合、新しい共通ユーザーはターゲットCDBの共通ユーザーにマージされます。ターゲットCDBの共通ユーザーのパスワードが優先されます。それ以外の場合は、新しく接続されたPDBの共通ユーザーはロックされたアカウントになります。この場合、次のいずれかを実行できます。

    • ユーザー・アカウントをロックされた状態にし、このスキーマのオブジェクトを使用します。

    • Oracle Data Pumpを使用して、これらのオブジェクトを別のスキーマにコピーし、ロックされているユーザー・アカウントを削除します。

    • PDBを閉じ、ルートに接続して、ロックされているアカウントと同じ名前で共通ユーザーを作成します。PDBを再度開くと、Oracle Databaseによって、ロックされているユーザーに共通に付与されたロールと権限の違いが解消されます。後で、PDBのこのユーザー・アカウントのロックを解除できます。ユーザーにローカルに付与されている権限およびロールは変更されません。

ローカル・ユーザーについて

マルチテナント環境では、ローカル・ユーザーとは、単一のPDBにのみ存在するデータベース・ユーザーです。

ローカル・ユーザーは管理権限を持つことができますが、これらの権限はローカル・ユーザー・アカウントが作成されたPDBにのみ適用されます。ローカル・ユーザー・アカウントには、共通ユーザー・アカウントと区別する次の特性があります。

  • ローカル・ユーザー・アカウントは、共通ユーザー・アカウントを作成できないまたは権限をローカルに付与できません。適切な権限を持つ共通ユーザーは、共通またはローカル・ユーザー・アカウントを作成および変更し、共通またはローカルに権限を付与および取り消すことができます。ローカル・ユーザーは、ローカル・ユーザー・アカウントを作成または変更したり、指定のPDBの共通またはローカル・ユーザーに権限をローカルに付与できます。

  • ローカル・ユーザー・アカウントの共通ロールを付与できます。ただし、共通ロールに関連付けられている権限は、ローカル・ユーザーのPDBにのみ適用されます。

  • ローカル・ユーザーは、そのPDB内のみで一意にする必要があります。

  • 適切な権限がある場合、ローカル・ユーザーは、共通ユーザーのスキーマのオブジェクトにアクセスできます。たとえば、共通ユーザーのスキーマ内の表にアクセスするためのローカル・ユーザー権限が共通ユーザーに付与されている場合、ローカル・ユーザーはその表にアクセスできます。

  • 共通ユーザー・アカウントではなくローカル・ユーザー・アカウントのエディションに対応できます。

関連項目:

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

CREATE USERシステム権限を付与されているユーザーは、ユーザー・アカウント(プロキシ・ユーザーとして使用されるユーザー・アカウントを含む)を作成できます。

CREATE USERは強力なシステム権限であるため、通常、この権限を持つユーザーはデータベース管理者またはセキュリティ管理者のみです。

ユーザーを作成する権限を持つユーザーを作成する場合は、GRANT文にWITH ADMIN OPTION句を含めます。次に例を示します。

GRANT CREATE SESSION TO lbrown WITH ADMIN OPTION;

権限を付与するすべてのユーザー・アカウントと同様に、これらの権限を信頼できるユーザーのみに付与します。

マルチテナント環境で共通ユーザー・アカウントを作成するには、共通に付与されるCREATE USERシステム権限が必要です。ローカル・ユーザー・アカウントを作成するには、ローカル・ユーザー・アカウントを作成するPDB内に、共通に付与されるCREATE USER権限またはローカルに付与されるCREATE USER権限が必要です。

注意:

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

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

最小限のデータベース権限を持つ新しいユーザー・アカウントの作成

新しいユーザー・アカウントを作成する場合、このユーザーがデータベースにアクセスできるようにする必要があります。

  1. CREATE USER文を使用して新しいユーザー・アカウントを作成します。

    例:

    CREATE USER jward 
     IDENTIFIED BY password 
     DEFAULT TABLESPACE example 
     QUOTA 10M ON example 
     TEMPORARY TABLESPACE temp
     QUOTA 5M ON system 
     PASSWORD EXPIRE;
    

    「パスワードの最低要件」のガイドラインに従って、passwordを安全なパスワードに置き換えます。

    この例では、ローカル・ユーザー・アカウントを作成し、ユーザー・パスワード、デフォルト表領域、一時セグメントが作成される一時表領域、表領域の割当て制限およびプロファイルを指定します。

  2. 少なくとも、データベース・インスタンスにアクセスできるように、ユーザーにCREATE SESSION権限を付与します。
    GRANT CREATE SESSION TO jward;
    

    新規作成されたユーザーは、CREATE SESSION権限を持つまでデータベースに接続できません。Oracle Enterprise Managerへのアクセスが必要なユーザーには、SELECT ANY DICTIONARY権限も付与する必要があります。

新しいアカウントのユーザー名の作成に関する制限事項

ユーザー・アカウントの名前を指定する場合は、名前が一意かどうかやネーミング規則などの制限事項に注意する必要があります。

内容は次のとおりです。

ユーザー名の一意性

各ユーザーにはスキーマが関連付けられています。スキーマ内の各スキーマ・オブジェクトには、必ず一意の名前を指定する必要があります。

Oracle Databaseでは、すでに存在しているユーザー名は作成できません。DBA_USERSデータ・ディクショナリ・ビューのUSERNAME列を問い合せて、既存の名前を確認できます。

マルチテナント環境のユーザー名

各PDB内のユーザー名は、そのPDB内の他のユーザー名およびロールと比較して一意である必要があります。

次の制約に注意してください:

  • ユーザーが作成する共通ユーザーの名前は、C## (またはc##)で始まる必要があります。

  • ローカル・ユーザー名をC## (またはc##)で始めることはできません。

  • ユーザーとロールに同じ名前を付けることはできません。

ユーザー名の大/小文字の区別

ユーザー名をどのように作成するかによって、データベースに格納されるユーザー名の大文字と小文字の区別が決まります。

例:

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;

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

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

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

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
 CONTAINER = CURRENT;

関連項目:

ユーザーのデフォルト表領域

デフォルト表領域は、ユーザーが作成するオブジェクトを格納します。

内容は次のとおりです。

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

各ユーザーには、デフォルト表領域が必要です。

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

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

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

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

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

デフォルト表領域を割り当てるためのDEFAULT TABLESPACE句

CREATE USER文のDEFAULT TABLESPACE句で、ユーザーにデフォルト表領域を割り当てます。

次のCREATE USER文では、ローカル・ユーザーjwardのデフォルト表領域は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
 CONTAINER = CURRENT;

関連項目:

表領域に対する領域割当て制限の割当てについては、「ユーザーの表領域の割当て制限」を参照してください。

ユーザーの表領域の割当て制限

表領域の割当て制限により、ユーザーの表領域に提供される領域の量が決まります。

内容は次のとおりです。

ユーザーへの表領域割当て制限の割当てについて

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

割当て制限による影響は、次のとおりです。

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

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

デフォルトでは、ユーザーに対するデータベースの表領域の割当て制限はありません。ユーザーがスキーマ・オブジェクトを作成する権限を持っている場合は、このユーザーがオブジェクトを作成できるようにするための割当て制限を割り当てる必要があります。最低でも、ユーザーにはデフォルト表領域の割当て制限と、ユーザーがオブジェクトを作成する他の表領域の追加割当て制限を割り当てます。表領域に割り当てることができる最大領域は2 TBです。より多くの領域が必要な場合は、QUOTA句にUNLIMITEDを指定します。

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

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

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

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

表領域の割当て制限を割り当てるためのCREATE USER文

CREATE USER文のQUOTA句は、表領域の割当て制限を割り当てます。

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

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

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

現在の割当てがゼロになるように、表領域内のユーザー・オブジェクトに割当て制限を設定できます。

割当て制限を指定するには、ALTER USER SQL文を使用します。

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

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

データベース内の表領域を無制限に使用することをユーザーに許可するには、そのユーザーにUNLIMITED TABLESPACEシステム権限を付与します。

UNLIMITED TABLESPACE権限によって、そのユーザーに対する明示的な表領域の割当て制限がすべて置き換えられます。後で権限を取り消す場合、個々の表領域に対して割当て制限を明示的に付与する必要があります。この権限は、ロールに対してではなく、ユーザーに対してのみ付与できます。

UNLIMITED TABLESPACEシステム権限を付与する前に、この方法のメリットとデメリットを考慮してください。

メリット

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

デメリット

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

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

ユーザーの一時表領域

一時表領域には、ユーザー・セッションの存続期間中のみ保持される一時データが含まれています。

内容は次のとおりです。

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

各ユーザーには、一時表領域を割り当てる必要があります。

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

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

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

注意:

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

ユーザー作成時に、そのユーザーの一時表領域を設定しておき、作成後にALTER USER文を使用して変更できます。個々の一時表領域を割り当てるかわりに、表領域グループを設定することもできます。

関連項目:

一時表領域と表領域グループの使用の詳細は、『Oracle Database管理者ガイド』を参照してください。

一時表領域を割り当てるためのTEMPORARY TABLESPACE句

CREATE USER文のTEMPORARY TABLESPACE句で、ユーザーに一時表領域を割り当てます。

次の例では、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
 CONTAINER = CURRENT;

ユーザーのプロファイル

プロファイルとは、属性によって定義される、データベース・リソースとそのデータベースへのパスワード・アクセスに関する一連の制限です。

プロファイルを複数のユーザーに適用して、ユーザーがこれらの属性を共有できるようにすることができます。

ユーザーの作成時に、プロファイルを指定できます。CREATE USER文のPROFILE句は、ユーザーにプロファイルを割り当てます。プロファイルを指定しない場合、ユーザーにはデフォルト・プロファイルが割り当てられます。

次に例を示します。

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;

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

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

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

共通ユーザーまたはローカル・ユーザーの作成

CREATE USER SQL文を使用して、共通ユーザーとローカル・ユーザーの両方を作成できます。

内容は次のとおりです。

共通ユーザー・アカウントの作成について

作成できる場所、ネーミング規則、スキーマに保存されるオブジェクトなど、ローカル・ユーザー・アカウントの制限事項に注意してください。

共通ユーザー・アカウントを作成するには、次の規則に従います。

  • 共通ユーザーを作成するには、ルートに接続し、共通に付与されるCREATE USERシステム権限が必要です。

  • セッションの現在のコンテナがCDB$ROOTである必要があります。

  • 共通ユーザーに指定した名前は、C##またはc##で始まり、ASCIIまたはEDCDIC文字のみを含む必要があります。(この要件は、SYSSYSTEMなど、Oracleから提供された既存のユーザー・アカウントの名前には適用されません。)既存のユーザー・アカウントの名前を確認するには、ALL_USERSCDB_USERSDBA_USERSおよびUSER_USERSデータ・ディクショナリ・ビューを問い合せます。

  • 共通ユーザーとしてユーザー・アカウントを明示的に指定するには、CREATE USER文で、CONTAINER=ALLを指定します。ルートにログインしている場合に、CREATE USER文からCONTAINER句を省略すると、CONTAINER=ALL句が暗黙のうちに入れられます。

  • 共通ユーザーのスキーマにはオブジェクトを作成しないでください。そうすると、接続および切断操作中に問題が発生する場合があります。

  • 共通ユーザー・アカウントのCREATE USER文でDEFAULT TABLESPACETEMPORARY TABLESPACEQUOTA...ONおよびPROFILE句を指定する場合、これらのオブジェクト(表領域、表領域グループおよびプロファイル)がCDBのすべてのコンテナに存在することを確認する必要があります。

  • 共通ユーザーが所有するユーザー作成のスキーマ・オブジェクトをPDB境界で共有できません。Oracle作成の共通ユーザーによって所有されているスキーマ・オブジェクトは、CDB全体で共有されます。

共通ユーザー・アカウントを作成するためのCREATE USER文

CREATE USER文とCONTAINER句を使用して、共通ユーザー・アカウントを作成できます。共通ユーザー・アカウントを作成するには、ルート内にいる必要があります。

次の例は、CONTAINER句を使用することで共通ユーザー・アカウントを作成し、SET CONTAINERおよびCREATE SESSION権限をユーザーに付与する方法を示しています。共通ユーザーは、コンテナ間を移動するためのこれらの権限が必要です。このアカウントを作成すると、すべてのコンテナでこの共通ユーザーに1つの共通パスワードが作成されます。

CONNECT SYSTEM
Enter password: password
Connected.

CREATE USER c##hr_admin
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 CONTAINER = ALL;

GRANT SET CONTAINER, CREATE SESSION TO c##hr_admin CONTAINER = ALL;

ローカル・ユーザー・アカウントの作成について

作成できる場所、ネーミング規則、スキーマに保存されるオブジェクトなど、ローカル・ユーザー・アカウントの制限事項に注意してください。

ローカル・ユーザー・アカウントを作成するには、次の規則に従います。

  • ローカル・ユーザー・アカウントを作成するには、アカウントを作成するPDBに接続して、CREATE USER権限を持つ必要があります。

  • ローカル・ユーザーに指定する名前は、共通ユーザーに予約されている接頭辞(CDB共通ユーザーの場合、デフォルトはC##)で始めることはできません。

  • CREATE USER文にCONTAINER=CURRENTを含め、ローカル・ユーザーとしてユーザーを指定できます。PDBに接続しており、この句を省略すると、CONTAINER=CURRENT句が含まれます。

  • 共通ユーザーとローカル・ユーザーの名前を同じにすることはできません。ただし、異なるPDBのローカル・ユーザーに同じ名前を使用できます。既存のユーザー・アカウントの名前を確認するには、ALL_USERSCDB_USERSDBA_USERSおよびUSER_USERSデータ・ディクショナリ・ビューを問い合せます。

  • 適切な権限があれば、PDBに接続されている共通ユーザーとローカル・ユーザーの両方で、ローカル・ユーザー・アカウントを作成できます。

ローカル・ユーザー・アカウントを作成するためのCREATE USER文

CREATE USER文のCONTAINER句を使用して、ローカル・ユーザー・アカウントを作成できます。

ローカル・ユーザー・アカウントは、そのアカウントを配置するPDBに作成する必要があります。

次の例は、CONTAINER句を使用したローカル・ユーザー・アカウントの作成方法を示しています。

CONNECT SYSTEM@hrpdb
Enter password: password
Connected.

CREATE USER kmurray
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE hr_profile
 CONTAINER = CURRENT;

ユーザーのデフォルト・ロールの作成

デフォルト・ロールは、ユーザーがセッションを作成したときに、自動的にそのユーザーに対して使用可能になります。

ユーザーには複数のデフォルト・ロールを割り当てることができますが、割り当てなくてもかまいません。CREATE USER文ではユーザーのデフォルト・ロールを設定できません。ユーザーを最初に作成すると、ユーザーのデフォルト・ロール設定はALLであり、ユーザーにその後に付与されるすべてのロールがデフォルト・ロールになります。

  • ALTER USER文を使用して、ユーザーのデフォルト・ロールを変更します。

次に例を示します。

GRANT USER rdale clerk_mgr;

ALTER USER rdale DEFAULT ROLE clerk_mgr;

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

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

ALTER USER文を使用して、ユーザー・アカウントを変更できます(そのデフォルト表領域やプロファイルの変更など)。さらに、ユーザーは、ユーザーのパスワードを変更できます。

内容は次のとおりです。

ユーザー・アカウントの変更について

ユーザーのセキュリティ設定の変更は、現行セッションではなく、それより後のユーザー・セッションから反映されます。

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

マルチテナント環境で共通ユーザー・アカウントを変更するには、共通に付与されるALTER USERシステム権限が必要です。ローカル・ユーザー・アカウントを変更するには、ローカル・ユーザー・アカウントが存在するPDB内で、共通に付与されるALTER USER権限またはローカルに付与されるALTER USER権限が必要です。

共通またはローカル・ユーザー・アカウントを変更するためのALTER USER文

ALTER USER文で、共通およびローカル・ユーザー・アカウントの両方を変更できます。

既存の共通ユーザー・アカウントをローカル・ユーザー・アカウントに変更でき、その逆も同様です。この場合は、共通ユーザー・アカウントまたはローカル・ユーザー・アカウントとして、新しいアカウントを作成する必要があります。

次の例は、ALTER USER文を使用して、ユーザーc##hr_adminV$SESSION行を表示する機能を、接続先がCDB$ROOTならびにemp_dbおよびhr_db PDBであるセッションに関連するものに制限する方法を示しています。

CONNECT SYSTEM
Enter password: password
Connected.

ALTER USER c##hr_admin
 DEFAULT TABLESPACE data_ts
 TEMPORARY TABLESPACE temp_ts
 QUOTA 100M ON data_ts
 QUOTA 0 ON test_ts
 SET CONTAINER_DATA = (emp_db, hr_db) FOR V$SESSION 
 CONTAINER = CURRENT;

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

  • DEFAULT TABLESPACEおよびTEMPORARY TABLESPACEは、data_tsおよびtemp_tsにそれぞれ明示的に設定されます。

  • QUOTA 100Mは、data_ts表領域に100MBを提供します。

  • QUOTA 0は、temp_ts表領域の割当て制限を取り消します。

  • SET CONTAINER_DATAは、ユーザーc##hr_adminemp_dbおよびhr_db PDBに関するデータにアクセスすることを可能にし、このユーザーがルートからV$SESSIONビューを問い合せる場合はルートに関するデータアクセスすることを可能にします。

関連項目:

SET CONTAINER_DATA句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

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

ユーザーは、自身のパスワードを変更できますが、他のユーザーのパスワードを変更するには、正しい権限が必要です。

内容は次のとおりです。

SYS以外のユーザーのパスワードの変更について

ユーザーは、PASSWORDコマンドまたはALTER USER文を使用してパスワードを変更できます。

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

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

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

関連項目:

PASSWORDコマンドまたはALTER USER文を使用したパスワードの変更

ほとんどのユーザーが、SQL*PlusのPASSWORDコマンドまたはALTER USER SQL文を使用して自身のパスワードを変更できます。

マルチテナント環境では、共通ユーザーは自分のパスワードをルートで変更する必要があります。
  • 次のいずれかの方法を使用して、ユーザーのパスワードを変更します。

    • SQL*PlusのPASSWORDコマンドを使用してパスワードを変更するには、ユーザーの名前を指定し、プロンプトが表示された場合は新しいパスワードを入力します。

      次に例を示します。

      PASSWORD andy
      Changing password for andy
      New password: password
      Retype new password: password
      
    • ALTER USER SQL文を使用してパスワードを変更するには、IDENTIFIED BY句を指定します。

      次に例を示します。

      ALTER USER andy IDENTIFIED BY password;

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

SYSユーザーのパスワードを変更するには、ORAPWDコマンドライン・ユーティリティを使用する必要があります。

内容は次のとおりです。

SYSユーザーのパスワードの変更について

ORAPWDコマンドライン・ユーティリティで、SYSユーザー・パスワードが格納された新しいパスワード・ファイルを作成できます。

次のことに注意してください。

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

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

  • 新しいアカウントは、SHA-2 (SHA-512)ベリファイアで作成されます。DBA_USERSデータ・ディクショナリ・ビューのPASSWORD_VERSIONS列を問い合せて、これらのアカウントを識別できます。(これらのパスワード・バージョンは、ビューの出力に12Cとしてリストされます。)このベリファイアが大きすぎて元のパスワード・ファイル形式に合わないため、ORAPWDコマンドのformat=12引数を使用して、パスワード・ファイルを拡張形式で作成する必要があります。そうしないと、PASSWORDコマンドを使用してSYSパスワードを変更しようとする場合、ORA-28017: パスワード・ファイルが拡張形式ではありません。エラーが表示されます。

  • Oracle Real Application Clusters (Oracle RAC)環境では、複数のOracle RACインスタンスで共有できるように、パスワードをASMディスク・グループに格納してください。

関連項目:

SYSユーザーのパスワードを変更するためのORAPWDユーティリティ

ORAPWDユーティリティでは、SYSユーザーのパスワードを変更できます。

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

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

パスワード・ファイルを移行する場合、現在のパスワード・ファイルを指定するためにinput_fileパラメータを含める必要があります。データベースが開いている間にユーザーがALTER USER文を使用してこのパスワードを変更しようとする場合のデッドロックの発生を防ぐには、sysオプションをyに設定します。次に例を示します。

orapwd input_file='orapworcl' file='orapwd' sys=y force=y
Enter password for SYS: new_password

関連項目:

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

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

リソースの制限により、ユーザーに利用可能なシステム・リソースの量が決まります。

内容は次のとおりです。

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

ユーザーのセキュリティ・ドメインの一部として、各ユーザーが使用できるシステム・リソースの容量に制限を設定できます。

そうすることで、CPUタイムなど貴重なシステム・リソースが無制限に消費されることを防ぐことができます。

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

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

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

関連項目:

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

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

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

内容は次のとおりです。

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

ユーザーがデータベースに接続すると、セッションが作成されます。セッションではCPU時間とメモリーが使用されますが、これらに制限を設定できます。

複数のリソース制限をセッション・レベルで設定できます。ユーザーがセッション・レベルのリソース限度を超えると、Oracle Databaseは現在の文を終了(ロールバック)して、セッション限度に達したことを示すメッセージを返します。この時点で、カレント・トランザクションのそれ以前の文のすべてがそのまま残り、ユーザーが実行できる操作のみがCOMMITROLLBACK、または切断になります(この場合、カレント・トランザクションはコミットされます)。他のすべての操作はエラーになります。トランザクションがコミットまたはロールバックされた後も、ユーザーはこれ以上の作業をカレント・セッション中は完了できません。

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

ユーザーがSQL文を実行するたびに、Oracle Databaseでは、いくつかのステップが実行され文が処理されます。

SQL文の処理では、データベースに対して複数のコールが異なる実行フェーズの一部として発行されます。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セッション中に実行されるブロック読取りの数として設定し、測定されます。

その他のリソースの制限

ユーザーの同時セッション数やアイドル時間に制限を設定できます。

その他のリソースの制限を次に示します。

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

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

    注意:

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

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

    注意:

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

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

    関連項目:

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

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

プロファイルを作成しリソース制限を設定する前に、各リソース制限について適切な値を決定する必要があります。

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

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

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

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

プロファイルとは、ユーザーのデータベース使用とインスタンス・リソースを制限する一連のリソース制限およびパスワード・パラメータに名前を付けたものです。

内容は次のとおりです。

プロファイルについて

プロファイルは、ユーザーに適用される属性の集合で、それらの属性を共有する複数ユーザーの中の任意のユーザーに関する単一の参照になります。

Oracle Internet Directoryのユーザー・プロファイルには、各ユーザーのディレクトリ使用と認証に関連した属性が含まれています。同様に、Oracle Label Securityのプロファイルには、Oracle Label Securityのユーザー管理や操作管理に役立つ属性が含まれています。プロファイル属性にはシステム・リソースに関する制限を含めることができます。データベース・リソース・マネージャを使用すると、これらのタイプのリソース制限を設定できます。

ユーザーごとにプロファイルを割り当てたり、すべてのユーザーにデフォルトのプロファイルを割り当てる必要があります。各ユーザーに割り当てることができるプロファイルは1つのみで、新しいプロファイルを作成すると、旧バージョンと置き換えられます。ユーザー・プロファイルを作成して管理する必要があるのは、リソース制限がデータベースのセキュリティ・ポリシーの要件である場合のみです。プロファイルを使用するには、最初にデータベース内のユーザーの関連タイプを分類します。ロールを使用して関連ユーザーの権限を管理するのと同様に、プロファイルを使用して関連ユーザーのリソース制限を管理します。データベース内のすべてのタイプのユーザーを含めるために必要なプロファイル数を決定してから、プロファイルごとに適切なリソース制限を決定します。

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

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

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

現行のプロファイルに関する情報を検索するには、DBA_PROFILESビューを問い合せます。

関連項目:

プロファイルの作成

プロファイルには、パスワードの制限やリソースの制限など、特定のカテゴリに対する制限が含まれます。

プロファイルを作成する場合、CREATE PROFILEシステム権限が必要です。すべての既存のプロファイルを検索するには、DBA_PROFILESビューを問い合せます。

  • プロファイルを作成するには、CREATE PROFILE文を使用します。

たとえば、パスワードの制限を定義するプロファイルを作成するとします。

CREATE PROFILE password_prof LIMIT
  FAILED_LOGIN_ATTEMPTS 6
  PASSWORD_LIFE_TIME 60
  PASSWORD_REUSE_TIME 60
  PASSWORD_REUSE_MAX 5
  PASSWORD_LOCK_TIME 1/24
  PASSWORD_GRACE_TIME 10
  PASSWORD_VERIFY_FUNCTION DEFAULT;

次の例は、リソース制限プロファイルの作成方法を示しています。

CREATE PROFILE app_user LIMIT 
  SESSIONS_PER_USER          UNLIMITED 
  CPU_PER_SESSION            UNLIMITED 
  CPU_PER_CALL               3500 
  CONNECT_TIME               50 
  LOGICAL_READS_PER_SESSION  DEFAULT 
  LOGICAL_READS_PER_CALL     1200 
  PRIVATE_SGA                20K
  COMPOSITE_LIMIT            7500000;

関連項目:

CREATE PROFILE SQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

ユーザーへのプロファイルの割当て

プロファイルの作成後、ユーザーにプロファイルを割り当てることができます。

すでにプロファイルを割り当てられているユーザーにプロファイルを割り当てることはできますが、直近に割り当てられたプロファイルが優先されます。外部ユーザーまたはグローバル・ユーザーにプロファイルを割り当てる場合、パスワードのパラメータは、そのユーザーに対して有効ではありません。

ユーザーに現在割り当てられているプロファイルを検索するには、DBA_USERSビューを問い合せます。

  • ALTER USER文を使用して、ユーザーにプロファイルを割り当てます。

次に例を示します。

ALTER USER psmith PROFILE app_user;

プロファイルの削除

プロファイルは、現在ユーザーに割り当てられている場合でも削除できます。

プロファイルを削除しても、現在アクティブなセッションに影響はありません。プロファイルの削除後に作成されたセッションのみが、変更されたプロファイル割当てを使用します。プロファイルを削除するには、DROP PROFILEシステム権限が必要です。デフォルトのプロファイルは削除できません。

  • プロファイルを削除するには、SQL文のDROP PROFILEを使用します。ユーザーに現在割り当てられているプロファイルを削除するには、CASCADEオプションを使用します。

次に例を示します。

DROP PROFILE clerk CASCADE;

削除するプロファイルに現在割り当てられているユーザーは、自動的にDEFAULTプロファイルに割り当てられます。DEFAULTプロファイルは削除できません。

関連項目:

DROP PROFILE SQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

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

ユーザーがユーザー・セッションにログインしていない場合、ユーザー・アカウントを削除できます。ユーザーを削除する場合、そのユーザーのスキーマに関連付けられているオブジェクトも削除されます。

内容は次のとおりです。

ユーザー・アカウントの削除について

ユーザー・アカウントを削除する前に、削除に適した権限があることを確認する必要があります。

いずれの環境でユーザー・アカウントを削除する場合でも、DROP USERシステム権限が必要です。マルチテナント環境で共通ユーザー・アカウントを削除するには、共通に付与されるDROP USERシステム権限が必要です。ローカル・ユーザー・アカウントを削除するには、ローカル・ユーザー・アカウントが存在するPDB内で、共通に付与されるDROP USER権限またはローカルに付与されるDROP USER権限が必要です。

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

注意:

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

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

ユーザー・セッションの終了

データベースに接続されているユーザーは削除できません。

ユーザーを削除する前に、まずユーザー・セッションを終了する必要があります(または、ユーザーがセッションを終了できます)。
  1. V$SESSION動的ビューを問い合せて、セッションを終了するユーザーのセッションIDを確認します。

    次に例を示します。

    SELECT SID, SERIAL#, USERNAME FROM V$SESSION;
    
        SID         SERIAL# USERNAME
    ------- --------------- ----------------------
        127          55234  ANDY
    ...
    
  2. ALTER SYSTEM SQL文を使用して、V$SESSIONビューのSID設定とSERIAL#設定に基づき、ユーザーのセッションを終了します。

    次に例を示します。

    ALTER SYSTEM KILL SESSION '127, 55234';
    

関連項目:

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

ユーザーがデータベースから切断した後のユーザーの削除について

ユーザーがデータベースから切断した後に、DROP USER文を使用してユーザーを削除できます。

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

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

スキーマにオブジェクトが含まれるユーザーの削除

スキーマ内にオブジェクトを格納しているユーザーを削除する前に、スキーマ・オブジェクトを削除した場合の影響を徹底的に調べます。

  1. DBA_OBJECTSデータ・ディクショナリ・ビューを問い合せて、ユーザーが所有するオブジェクトを確認します。

    次に例を示します。

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

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

  2. ユーザーとすべての関連オブジェクト、およびそのユーザーが所有する表に依存する外部キーを削除するには、DROP USER SQL文とCASCADE句を使用します。

    次に例を示します。

    DROP USER andy CASCADE;

データベース・ユーザーおよびプロファイルのデータ・ディクショナリ・ビュー

Oracle Databaseには、ユーザーとプロファイルの作成に使用した設定の情報を提供する、一連のデータ・ディクショナリ・ビューがあります。

内容は次のとおりです。

ユーザーとプロファイルに関する情報を表示するデータ・ディクショナリ・ビュー

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 example
 TEMPORARY TABLESPACE temp
 QUOTA 500K ON example
 PROFILE clerk
    CONTAINER = CURRENT;

CREATE USER dcranney
 IDENTIFIED BY password
 DEFAULT TABLESPACE example
 TEMPORARY TABLESPACE temp
 QUOTA unlimited ON example
 CONTAINER = CURRENT;

CREATE USER userscott
 IDENTIFIED BY password
 CONTAINER = CURRENT;

すべてのユーザーと関連情報を検索する問合せ

DBA_USERSデータ・ディクショナリ・ビューには、データベースで定義されているすべてのユーザーとその関連情報が表示されます。

DBA_USERSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

次に例を示します。

col username format a11
col profile format a10
col account_status format a19
col authentication_type format a29

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
----------    ---------  --------   ----------   -------   ----------
EXAMPLE       JFEE              0       512000         0          250
EXAMPLE       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'に置き換えてください。