📑

ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~ユーザーと権限編~

2024/06/04に公開

はじめに

本記事は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には不要な権限が付与されていないかを確認する権限分析機能があります。

権限分析機能を使用する手順は以下の通りです。

  1. DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャを実行し、権限分析ポリシーを作成
  2. DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTUREプロシージャを実行し、1.で作成したポリシーを有効化
  3. 権限分析したいアプリケーションの処理を実行、この時に実際に使用された権限が記録
  4. DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTUREプロシージャを実行し、ポリシーを無効化
  5. DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULTプロシージャを実行し、権限取得結果を示すレポートを生成
  6. ディクショナリビューから権限の使用状況を確認し、不要な権限を特定して権限を取り消し
  7. 必要に応じて権限分析ポリシーを削除

権限分析機能の留意点は以下の通りです。

  • 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