ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~ユーザーと権限編~
はじめに
本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。
ORACLE MASTERとは
Oracle Databaseの管理スキルを証明するOracle社の資格です。
Bronze, Silver, Gold, Platinumの4ランクあります。
Oracle Databaseのユーザー
Oracle Databaseを使用するには用途に応じたユーザーをあらかじめ作成する必要があります。
Oracle Databaseにはいくつか管理用ユーザーがあらかじめ作成されています。
ユーザー名 | 説明 |
---|---|
SYS | データベースの起動・停止を含むすべての操作を実行できる管理用ユーザー |
SYSTEM | データベースの起動停止など一部を除き、ほぼすべての操作を実行できる管理用ユーザー |
事前作成済み管理用ユーザーの特徴は以下の通りです。
- ユーザーを作成する権限を含むすべてのシステム権限を含むDBAロールが付与されています
- パスワードはデータベース作成時に指定したものです
- これらのユーザーは削除できません
CREATE USER
ユーザーを作成するには CREATE USER
を使用します。
CREATE USER
はCREATE USERシステム権限を持つユーザーで実行する必要があります。
事前作成済みの管理用ユーザーはCREATE USERシステム権限を持っています。
CREATE USER
に指定できる主なユーザー属性は以下の通りです。
属性 | 説明 |
---|---|
ユーザー名 | 新規に作成するユーザー名 |
認証方式 | データベースに接続する時に使用する認証方式 |
デフォルト表領域 | 格納先表領域を指定せずにオブジェクトを作成した場合に格納先となる表領域 |
デフォルト一時表領域 | 大量のデータ処理(ソートなど)を実行する時に使用される一時表領域 |
表領域のクォータ | 表領域を使用できるサイズの上限(割り当て制限)。なお、サイズとしてUNLIMITEDを指定した場合、その表領域を無制限に使用できる |
プロファイル | パスワード管理ポリシーまたはリソース制限 |
パスワード期限切れ | 初回ログイン時にパスワード設定を必要とするかどうか |
アカウントロック | 一時的にログイン不可状態とするかどうか |
ユーザー名とパスワードのルール
ユーザー名のルールは以下の通りです。
- 長さは30バイト以内(12c R1以前)もしくは120バイト以内(12c R2以降)
- 以下の場合はユーザー名を
"
で囲む- 英数字及び
$
,_
,#
以外の文字を使用した場合 - 先頭にアルファベット以外の文字を使用した場合
- Oracleの予約語を使用した場合
- アルファベットの大文字・小文字を区別する場合
- 英数字及び
- データベース内で名前は一意に保つ
パスワードのルールは以下の通りです。
- 長さは30バイト以内
- 以下の場合はパスワードを
"
で囲む- 英数字及び
$
,_
,#
以外の文字を使用した場合 - 先頭にアルファベット以外の文字を使用した場合
- Oracleの予約語を使用した場合
- 英数字及び
ユーザーのデフォルト表領域
格納先表領域を指定せずに表や索引を作成すると、その表や索引はユーザーのデフォルト表領域に格納されます。
ロックされたユーザーが所有するオブジェクトの扱い
ユーザーがロックされても、ユーザーが所有する表や索引などのオブジェクトは削除されずにデータベースに残り使用可能です。
アクセス権限を持っている別のユーザーでログインすればユーザーのオブジェクトを操作できます。
ユーザー属性の変更
ユーザー名以外のユーザー属性は ALTER USER
で後から変更できます。
ユーザーの削除
使用しなくなったユーザーは DROP USER
で削除できます。次の点に注意してください。
- データベースに接続中のユーザーは削除できません
- ユーザーが表や索引などのオブジェクトを所有している場合は、あらかじめオブジェクトを削除しておくか、
CASCADE
を指定します
ユーザーを削除した場合は、ユーザーが所有する表や索引などのオブジェクトも削除されます。
権限
Oracle Databaseの権限はシステム権限とオブジェクト権限の2種類に分類できます。
権限 | 概要 | 権限付与の対象となる操作 |
---|---|---|
システム権限 | データベースに対してどのような操作を許可するか | データベースにログイン、表を作成、表領域を作成、ユーザーを作成等 |
オブジェクト権限 | 他のユーザーが所有する特定のオブジェクトに対して、どのような操作を許可するか | 検索、挿入、更新、削除 |
権限をユーザーに付与するには GRANT
、取り消すには REVOKE
を使用します。
システム権限を付与及び取り消すには ADMIN
オプションを指定してシステム権限が付与されているか、 GRANT ANY PRIVILEGE
システム権限が付与されている必要があります。
ADMIN
オプションは特定のシステム権限を付与、取り消しできるようにします。
GRANT ANY PRIVILEGE
システム権限が付与されている場合はすべてのシステム権限を他のユーザーに付与、取り消しできます。
オブジェクト権限を付与するには WITH GRANT OPTION
オプションを指定してオブジェクト権限が付与されているか、 GRANT ANY OBJECT PRIVILEGE
システム権限が付与されている必要があります。
WITH GRANT OPTION
オプションは特定のオブジェクト権限を付与できるようにします。
GRANT ANY OBJECT PRIVILEGE
システム権限が付与されている場合はすべてのオブジェクト権限を他のユーザーに付与できます。
オブジェクト権限の取り消しは実際にそのオブジェクト権限を付与したユーザーか GRANT ANY OBJECT PRIVILEGE
システム権限が付与されたユーザーのみが行えます。
ただし別のユーザーが WITH GRANT OPTION
オプションでオブジェクト権限を付与した場合はその付与したユーザーが取り消す必要があります。
原則として捜査の実行には権限が必要ですが、自ユーザーが所有するオブジェクトに関する操作は権限を付与する必要はありません。
ロール
ロールとは複数の権限を1つにまとめて扱いやすくしたものです。
ロールの留意点は以下の通りです。
- ロールをユーザーに付与した後で、ロールに変更を加えると、そのロールを付与されたすべてのユーザーにロールの変更が反映されます
- ロールにロールを付与できます
- この時、付与されたロールに含まれるすべての権限が有効になります
ロールの作成は CREATE ROLE
で行います。すでにあるロール名、ユーザー名と同じ名前のロールは作成できません。
ロールの削除は DROP ROLE
で行います。
ロールにシステム権限、オブジェクト権限を付与するには GRANT
、権限を取り消すには REVOKE
を使用します。
ロールをユーザーに付与するには GRANT
、取り消すには REVOKE
を使用します。システム権限等の付与・取り消しと同様です。
事前定義済みロール
Oracle Databaseを作成すると、以下の事前定義済みロールが自動的に作成されます。
ロール | 説明 |
---|---|
CONNECT | CREATE SESSION権限のみが含まれており、データベースへの接続を可能にする |
RESOURCE | スキーマオブジェクトの作成、変更、削除を可能にする |
DBA | デフォルトで SYS 及び SYSTEM ユーザーに付与される。すべてのシステム権限が含まれており、ユーザーの作成及び権限の付与、ロールの作成及び付与などを含むほとんどの管理機能を実行可能にする。ただし、インスタンスの起動・停止の権限は含まれない |
SELECT_CATALOG_ROLE | データディクショナリ内のオブジェクトに対するSELECT権限 |
EM_EXPRESS_BASIC | EM Expressに接続して、読み取り専用モードでページを表示する権限 |
EM_EXPRESS_ALL | EM Expressに接続して、EM Expressによって提供されるすべての機能を使用できる権限 |
PUBLICロール
PUBLICロールに権限を付与すると付与した権限がすべてのOracleユーザーに付与されます。
また、すべてのユーザーがアクセス可能なオブジェクトの所有者はPUBLICロールになります。
権限分析
Oracle Databaseには不要な権限が付与されていないかを確認する権限分析機能があります。
権限分析機能を使用する手順は以下の通りです。
- DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャを実行し、権限分析ポリシーを作成
- DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTUREプロシージャを実行し、1.で作成したポリシーを有効化
- 権限分析したいアプリケーションの処理を実行、この時に実際に使用された権限が記録
- DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTUREプロシージャを実行し、ポリシーを無効化
- DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULTプロシージャを実行し、権限取得結果を示すレポートを生成
- ディクショナリビューから権限の使用状況を確認し、不要な権限を特定して権限を取り消し
- 必要に応じて権限分析ポリシーを削除
権限分析機能の留意点は以下の通りです。
-
SYS
ユーザー以外のユーザーを権限分析できます - 調査対象は以下の4つを指定可能
- 全データベース:
SYS
ユーザー以外の全ユーザー - ロール:指定されたロールを付与されたユーザー
- コンテキスト:指定した評価式に合致するユーザー
- ロールとコンテキスト:指定されたロールを付与され、かつ、指定した評価式に合致するユーザー
- 全データベース:
- ユーザーに対して直接付与された権限、ロールを介して間接的に付与された権限の両方を分析できます
一般ユーザーの認証方式
管理権限を持たない一般ユーザーの認証方式にはデータベース認証またはOS認証を利用できます。
データベース認証はデータベース内のデータディクショナリに格納したユーザー情報(ユーザー名とパスワード)をもとに認証する方法です。
データベース認証を使用する一般ユーザーは IDENTIFIED BY
を指定した CREATE USER
を実行して作成できます。
OS認証は接続処理を実行したOSのユーザー名をもとにユーザー認証する方法です。
OSユーザー名にOS_AUTHENT_PREFIX初期化パラメータで指定された接頭辞がついたOS認証のユーザーがある場合にログインを許可します。
例えばOS_AUTHENT_PREFIXが dev$
だった場合はOSユーザー u1
に対応するユーザー名は dev$u1
になります。
OS認証を使用する一般ユーザーは IDENTIFIED EXTERNALLY
を指定した CREATE USER
を実行して作成できます。
割り当て制限領域(クォータ)
クォータはその表領域において、ユーザーが使用可能な記憶域の最大サイズです。表領域ごとにクォータを割り当てることができます。
ユーザーはクォータを超えて、表りょいきの記憶域を使用できません。
ユーザーが使用する表領域には、必ず表領域のクォータを割り当てます。ただし、クォータを設定した表領域に表や索引などのオブジェクトを作成するには、オブジェクトの作成を許可するシステム権限も併せて必要なことに注意してください。
一時表領域およびUNDO表領域の使用にクォータは不要です。(というより割り当てられない)
ユーザーは自分に割り当てられていない表領域に表を作成できません。ただし、遅延セグメントが有効の場合、表や索引を作成してもその時点では表領域から記憶域が割り当てられていないため、クォータが割り当てられていない表領域に表を作成できます。クォータが割り当てられていない場合、INSERTはできません。
また、ユーザーにUNLIMITED TABLESPACEシステム権限を付与するとすべての表領域について無制限に記憶域を割り当てることが可能になります。(権限は必要)
UNLIMITED TABLESPACEシステム権限はユーザーに直接付与する必要があります。
プロファイル
プロファイルはユーザー管理ポリシーおよびリソース制限に関する設定をセットしたものです。あらかじめ作成したプロファイルをユーザーに割り当てることで、パスワード管理ポリシーとリソース制限に関する設定のセットを簡単に割り当てることができます。
ユーザー作成時にプロファイルを指定しなかった場合、DEFAULTという名前のプロファイルが割り当てられます。
プロファイルに指定するパスワード管理ポリシーは以下の通りです。
属性の名称 | 内容 | 単位 |
---|---|---|
FAILED_LOGIN_ATTEMPTS | ログインに連続して失敗できる回数。失敗回数がこの値を超えた場合、アカウントはロックされる | 回数 |
PASSWORD_LOCK_TIME | ログインに連続して失敗してアカウントがロックされた場合に、アカウントがロックされる日数 | 日 |
INACTIVE_ACCOUNT_TIME | ログインしていない期間がこの値を超えた場合、アカウントはロックされる | 日 |
PASSWORD_LIFE_TIME | 同じパスワードを継続して利用できる最大日数 | 日 |
PASSWORD_GRACE_TIME | パスワードの期限が切れた後、最初にログインし てからパスワードを変更するまでの猶予期間の日数。猶予期間が経過すると、パスワードを変更するまでログインできなくなる | 日 |
PASSWORD_REUSE_TIME | 現在使用しているパスワードを再び使用するまでに最低限必要な日数 | 日 |
PASSWORD_REUSE_MAX | 現在使用しているパスワードを再び使用するまでに最低限必要なパスワードの変更回数 | 回数 |
PASSWORD_VERIFY_FUNCTION | パスワードの複雑さを検証するスクリプト | スクリプトの名前 |
プロファイルに指定するリソース制限は以下の通りです。
パラメータ | 概要 | 単位 |
---|---|---|
CPU_PER_SESSION | セッションで使用できるCPU時間合計。超過するとセッションが切断される | 1/100秒 |
CPU_PER_CALL | 個々のSQL 実行で使用できるCPU時間。超過するとSQL実行エラーとなる | 1/100秒 |
CONNECT_TIME | 接続時間。超過するとセッションが切断される | 分 |
IDLE_TIME | セッションでアイドル状態が許される時間。超過するとセッションが切断される | 分 |
SESSIONS_PER_USER同じアカウント名を使用して接続できるセッション数。超過すると新規接続できない | セッション数 | |
PRIVATE_SGA | 共有サーバー接続時に使用できるSGA内のUGA最大サイズ。超過するとSQL実行エラーとなる | バイト |
LOGICAL_READS_PER_SESSION | セッションで使用できる論理I/Oブロック合計数。超過するとセッションが切断される | ブロック |
LOGICAL READS PER CALL | 個々のSQL実行で使用できる論理I/Oブロック合計数。超過するとSQL実行エラーとなる | ブロック |
COMPOSITE LIMIT | CPU_PER_SESSION、LOGICAL_READS_PER_SESSION、CONNECT_TIME、PRIVATE_SGAをもとに算出されたコスト値で制限。超過するとセッションが切断される | コスト |
また、プロファイルによるリソース制限を使用するには、RESOURCE_LIMIT初期化パラメータをTRUEに設定する必要があります。
セキュリティ上の推奨設定
セキュリティを高めるための推奨設定は以下の通りです。
- 監査機能を有効化する
- 標準監査
- 統合監査
- ファイングレイン監査
- DBA監査
- 不要な権限を付与しない
- 権限分析機能を使用し、不要な権限を付与していないかをチェックする
- 定義済みロールを付与する場合は不要な権限が含まれていないかをチェックする
- 通信やファイルI/Oといった、データベース外部とやり取りする、セキュリティ上問題となる可能性があるパッケージの実行権限を付与する場合は十分に注意を払う
- PUBLICロールに権限を付与する場合に注意を払う
- 不要なユーザーアカウントはロックする
- 十分に複雑なパスワードを使用する
- 危険な初期化パラメータを非デフォルト値に変更しない
07_DICTIONARY_ACCESSIBILITY
SEC_CASE_SENSITIVE_LOGON
REMOTE_OS_AUTHENT
UTL_FILE_DIR
おわり
ユーザーと権限編はここまで。
次は表領域とデータファイル管理について説明していきます。
Discussion