この章の内容は、次のとおりです。
各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
であるSYS
、SYSTEM
、および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
システム権限を付与する前に、この方法のメリットとデメリットを考慮する必要があります。
メリット
データベースのすべての表領域に無制限にアクセスできる権限を1つの文でユーザーに付与できます。
デメリット
各ユーザーには、一時表領域を割り当てる必要があります。ユーザーが一時セグメントを必要とする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
文を使用して変更できます。個々の一時表領域を割り当てるかわりに、表領域グループを設定することもできます。
関連項目:
|
ユーザーの作成時に、プロファイルを指定できます。プロファイルとは、データベース・リソースとそのデータベースへのパスワード・アクセスに関する一連の制限です。プロファイルを指定しない場合、ユーザーにはデフォルト・プロファイルが割り当てられます。
次の例は、ユーザーにプロファイルを割り当てる方法を示しています。
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
のセキュリティ設定は次のように変更されます。
認証方式は、ユーザーavyrros
のオペレーティング・システム・アカウントが使用されます。
ユーザーAVYRROS
のデフォルト表領域と一時表領域が明示的に設定されます。
ユーザーavyrros
のDATA_TS
表領域に対する割当て制限が100MBになります。
ユーザーavyrros
のtest_ts
に対する割当て制限が取り消されます。
ユーザーavyrros
がclerk
プロファイルに割り当てられます。
ほとんどのユーザーが、次のように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
コマンドでは新規パスワードが表示されないため、自分のみが把握し、他者に知られることはありません。どちらの場合も、パスワードはネットワーク上で暗号化されます。
ユーザーが認証方式を切り替えるには、PASSWORD
とALTER USER
権限が必要です。通常、この権限を持つのは管理者のみです。
関連項目:
|
SYS
ユーザーのパスワードを変更する場合は、 ORAPWD
コマンドライン・ユーティリティを使用して、使用するパスワードが含まれたパスワード・ファイルを新規作成する必要があります。ALTER USER
文やPASSWORD
コマンドを使用したSYS
ユーザー・パスワードの変更はしないでください。次のことに注意してください。
SYS
ユーザー・アカウントは、ほとんどの内部再帰的SQLが使用します。そのため、ALTER USER
文を使用してこのパスワードを変更しようとするときにデータベースがオープンしていると、デッドロックが生じる可能性があります。
ALTER USER
を使用してSYS
ユーザー・パスワードを変更しようとする場合に、インスタンス初期化パラメータREMOTE_LOGIN_PASSWORDFILE
がSHARED
に設定されていると、SYS
パスワードを変更できません。ALTER USER
文は、ORA-28046: SYSのパスワードは変更できません
のエラーで失敗します。
例2-3では、ORAPWD
を使用して新しいSYS
パスワードが含まれたパスワード・ファイルを作成する方法を示しています。この例では、新規パスワードはorapworcl
という名前のパスワード・ファイルに格納されます。(このパスワード・ファイルがすでに存在する場合は、 OPW-00005: 同一名のファイルがあります。 - 削除または名前を変更してください。
のエラーにより他の名前を選択するように警告されます。既存のパスワード・ファイルを上書きする場合は、force=y
引数をORAPWD
コマンドに追加してください。)
関連項目: orapwdコマンド構文と引数の詳細は、『Oracle Database管理者ガイド』 を参照してください。 |
この項の内容は、次のとおりです。
ユーザーのセキュリティ・ドメインの一部として、各ユーザーが使用できる各種のシステム・リソースの容量に制限を設定できます。そうすることで、CPUタイムなど貴重なシステム・リソースが無制限に消費されることを防ぐことができます。リソース制限を設定するには、データベース・リソース・マネージャを使用します。データベース・リソース・マネージャは、『Oracle Database管理者ガイド』で説明されています。
このリソース制限機能は、システム・リソースに多額の費用がかかる大規模なマルチ・ユーザー・システムでは非常に有効です。1人以上のユーザーが過度にリソースを使用すると、データベースの他のユーザーに有害な影響を与える可能性があります。シングル・ユーザー・データベースや小規模なマルチ・ユーザー・データベースの場合は、ユーザーがシステム・リソースを消費しても影響は少ないため、システム・リソース機能はそれほど重要ではありません。
ユーザーのリソース制限は、データベース・リソース・マネージャを使用して管理します。パスワード管理の作業環境は、ユーザーごとに個別にプロファイルを使用して設定するか、または多数のユーザー用のデフォルト・プロファイルを使用して設定できます。それぞれのOracleデータベースに指定できるプロファイルの数に、制限はありません。Oracle Databaseでは、セキュリティ管理者が、プロファイルによるリソース制限の規定を全体的に使用可能または使用禁止に設定できます。
リソース制限を設定すると、ユーザーによるセッション作成時に、パフォーマンスがわずかに低下します。これは、各ユーザーがデータベースに接続した時点で、そのユーザーのすべてのリソース制限データがロードされるためです。
関連項目: リソース管理の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
Oracle Databaseでは、CPUタイムや論理読取りなど様々なタイプのシステム・リソースの使用を制限できます。一般にこれらのリソースの各々を、セッション・レベル、コール・レベル、または両方のレベルで制御できます。これを次のセクションで説明します。
ユーザーがデータベースに接続するたびに、セッションが作成されます。それぞれのセッションは、Oracle Databaseを実行するコンピュータのCPUタイムとメモリーを使用します。複数のリソース制限をセッション・レベルで設定できます。
ユーザーがセッション・レベルのリソース限度を超えると、Oracle Databaseは現在の文を終了(ロールバック)して、セッション限度に達したことを示すメッセージを返します。この時点で、カレント・トランザクションのそれ以前の文のすべてがそのまま残り、ユーザーが実行できる操作のみがCOMMIT
、ROLLBACK
、または切断になります(この場合、カレント・トランザクションはコミットされます)。他のすべての操作はエラーになります。トランザクションがコミットまたはロールバックされた後も、ユーザーはこれ以上の作業をカレント・セッション中は完了できません。
ユーザーがSQL文を実行するたびに、Oracle Databaseでは、いくつかのステップが実行され文が処理されます。この処理では、データベースに対して複数のコールが異なる実行フェーズの一部として発行されます。1回のコールで過度にシステムが使用されないように、Oracle Databaseでは、複数のリソース制限をコール・レベルで設定できます。
ユーザーがコール・レベルのリソース制限を超えると、Oracle Databaseは文の処理を停止してその文をロールバックし、エラーを戻します。ただし、カレント・トランザクションのそれ以前の文の結果はそのまま残り、そのユーザー・セッションは接続されたままになります。
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つのセッションでのコール間の時間がアイドル制限時間に達すると、カレント・トランザクションがロールバックされてセッションは終了し、そのセッションのリソースはシステムに戻されます。次のコールは、ユーザーがインスタンスから切断されたことを示すエラーを受け取ります。この制限は、分単位の経過時間として設定します。
セッション当たりの経過接続時間の制限。セッションの持続時間が経過制限時間を超えると、カレント・トランザクションがロールバックされてセッションが削除され、そのセッションのリソースがシステムに戻されます。この制限は、分単位の経過時間として設定します。
注意: 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ではこのユーザー・アカウントおよび対応するスキーマがデータ・ディクショナリから削除されます。さらに、ユーザー・スキーマに含まれているすべてのスキーマ・オブジェクトも(存在する場合)削除されます。
注意:
|
現在データベースに接続されているユーザーは削除できません。接続中のユーザーを削除するには、最初に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
のセッションを停止する方法を示します。
データベースからユーザーを削除するには、DROP USER
文を使用します。ユーザーとそのユーザーのスキーマ・オブジェクト(ある場合)をすべて削除するには、DROP USER
システム権限が必要です。DROP USER
システム権限は強力な権限であるため、通常はセキュリティ管理者のみがこの権限を持ちます。
ユーザーのスキーマに依存型のスキーマ・オブジェクトが含まれている場合に、ユーザーと対応付けられているすべてのオブジェクト、およびそのユーザーの表に依存している外部キーをすべて削除するには、CASCADE
オプションを使用します。CASCADE
を指定していない場合は、ユーザーのスキーマに依存型のオブジェクトが含まれていると、エラー・メッセージが戻され、ユーザーは削除されません。
スキーマ内にオブジェクトを格納しているユーザーを削除する前に、スキーマ内のオブジェクトおよびそれらを削除する場合の影響を徹底的に調べます。DBA_OBJECTS
ビューを問い合せると、特定のユーザーが所有しているオブジェクトを確認できます。
例2-6に、ユーザーandy
が所有するオブジェクトを検索する方法を示します。
(ユーザー名を大文字で入力します。)事前に認識できない連鎖的な影響に注意してください。たとえば、表を所有するユーザーを削除する場合は、ビューまたはプロシージャがその表に依存していないかどうかを確認してください。
例2-7では、ユーザーandy
とそれに対応付けられたすべてのオブジェクト、およびandy
が所有する表に依存するすべての外部キーを削除します。
関連項目: セッション終了の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
表2-1に、データベース・ユーザーとプロファイルに関する情報が含まれたデータ・ディクショナリ・ビューを示します。これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
表2-1 ユーザーとプロファイルに関する情報を表示するデータ・ディクショナリ・ビュー
ビュー | 説明 |
---|---|
|
現行ユーザーがアクセス可能なすべてのオブジェクトが表示されます。 |
|
現行ユーザーに対して表示可能なユーザーがリストされますが、それらの記述は表示されません。 |
|
すべてのプロファイルとそれぞれの制限が表示されます。 |
|
ユーザーの表領域割当て制限が表示されます。 |
|
データベース内のすべてのオブジェクトが表示されます。 |
|
データベースのすべてのユーザーの記述が表示されます。 |
|
デフォルト・パスワードが設定されているすべてのユーザー・アカウントがリストされます。 |
|
他のユーザーの識別情報を引き継ぐことができるユーザーの記述が表示されます。 |
|
セッション当たりのCPU、セッション当たりの読取り、接続時間およびSGAの観点から各リソースのコストがリストされます。 |
|
ユーザーに割り当てられているパスワード・プロファイル・パラメータが表示されます。 |
|
現行ユーザーのリソース制限が表示されます。 |
|
ユーザーの表領域割当て制限が表示されます。 |
|
現行ユーザーが所有するすべてのオブジェクトが表示されます。 |
|
現行ユーザーの記述のみが表示されます。 |
|
現行セッションごとに、ユーザー名を含んだセッション情報が表示されます。 |
|
ユーザー・セッションの統計がリストされます。 |
|
|
次の各項では、これらのビューの使用例を示します。各例では、次の文がすでに実行されていることを前提としています。
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'
に置き換えてください。