Oracleデータベース導入時のセキュリティ対策の基本データベースセキュリティの基礎のキソ(3)

» 2003年10月30日 00時00分 公開
[篠田道明インターネット総合研究所]

 「第2回 データベースの設置場所および接続時の勘所」では、基本的なOracleデータベースのネットワーク設定について解説した。今回は、Oracleデータベースの導入および運用時の基本的なセキュリティ対策について説明する。なお、以下のセキュリティ対策は、Oracle9iデータベース R9.2.0以降を対象とする。

※ご注意

Oracle9i R9.2.0以前では、今回記載されている項目以外に別途対策が必要な場合もある。別途、製品マニュアルなどをご参照ください。


Oracleデータベースのインストール前に行う作業

 Oracleデータベースの構築前に行う必要がある作業とは、まずOSの要塞化である。

 Oracle9iデータベースを導入するサーバについて、不要なサービスや不要なアカウントをできる限り排除することで、より強固なOracleデータベースサーバが構築できる。第2回でも簡単に紹介したが、OSの要塞化のためのインストールは、Oracle9iデータベースの導入において必要な作業になる。この作業を行わずして、Oracleデータベースのセキュリティ対策はないだろう。

 なお、詳細については、「【連載】止められない基幹業務サーバの管理対策」などの記事を参考にしていただければよいだろう。

Oracleデータベースのインストール時
およびインストール後に行う作業

 Oracleデータベースを導入して、運用を始めるときにどんなセキュリティ対策を行う必要があるだろうか? 答えとしては、Oracleデータベースのアカウントおよびテーブルなどのオブジェクトを守る必要があるだろう。それには、以下の理由が考えられる。

 1つは、Oracleデータベースに対する不正アクセスを防ぐことで、外部の攻撃からOracleデータベースに保存されている重要なデータを守るという点。もう1つは、社内のシステム利用者およびシステム管理者などOracleデータベースへのアクセスが許可されているユーザーでも、許可されていないデータベースオブジェクト(テーブルやビュー)にアクセスできないようにするということ、があるだろう。

 Oracleデータベースにおけるセキュリティ対策は、前回まで説明してきたネットワークにおけるセキュリティ対策とOSにおけるセキュリティ対策の上に成り立っており、それらの対策が完全に行われているうえで、最大限の効果を発揮できることは「第1回 データベースセキュリティの基本的な考え方」でも説明したとおりだ。

 では、まずアカウントに関するセキュリティ設定について見ていこう。

●アカウント関連のセキュリティ対策作業

 Oracleデータベースを導入する際(インストール時)に不要なアカウントを登録および放置しないというセキュリティ対策を行うことで、Oracleデータベースのユーザーアカウントに対する潜在的なセキュリティの問題が発生する可能性を大幅に下げることができる。

図1 インストール時のSYSとSYSTEMのパスワード設定画面(拡大) 図1 インストール時のSYSとSYSTEMのパスワード設定画面(拡大)

 Oracle8i以降になってから、Windowsプラットフォームでの利用者も増えてきて*1GUIを利用すればOracleデータベースの初心者でも専用インストーラ(Oracle Universal Installer)を操作することで比較的簡単にインストールできるようになった。

*1筆者が初めて触れたOracle 7.3の時代でもGUIのインストールツールがSolarisやWindowsプラットフォーム上で用意されており、基本的にはGUI環境でインストールすることが基本だったが……。


 しかし、SQL Serverなどのほかのデータベースプラットフォームと同じように、デフォルトの状態ではインストール後にいくつかのチェックしなければいけない項目が存在していた。

 Oracle9iデータベース R9.2.0では、その部分をさらに一歩進めてより積極的にセキュリティを高める設定を行ってくれるようになった。これは、何年もOracleデータベースを構築・運用してきた立場からいえば、非常にありがたい機能だ。以前からセキュリティという概念はあったが、システム構築の現場でセキュリティ対策がクローズアップされるまでは、Oracleデータベースの導入においては、比較的見過ごされた領域ではないだろうか(特に、イントラネット上に構築されてきたシステムなどではそういう傾向があったのではないだろうか)。

・システム管理者(SYSおよびSYSTEM)のパスワードを設定

Oracle9iデータベースR9.2.0以前ではDatabase Configuration Assistant(DBCA)を利用してデータベース作成を行う場合、システム管理者であるSYSとSYSTEMには、デフォルトのパスワードが設定されていた。SYSは、CHANGE_ON_INSTALL、SYSTEMはMANAGERといった具合だ。現在のように、インターネット上で非常に多くのOracleデータベースが利用されている状況では、セキュリティ上の大きな問題になる可能性がある(ただし、Oracleデータベースサーバがインターネット上にそのまま置かれていることはあまり多くはないと思われるが……)。Oracle9iデータベース R9.2.0以降はこの部分が大幅に改善されて、インストール作業中にSYSとSYSTEMのパスワードを任意のパスワードに設定することができるようになった。

図2 Universal Installerのアカウント設定(拡大) 図2 Universal Installerのアカウント設定(拡大)

・インストール時に作成される不必要なアカウントを止める

さらに、Oracle9iデータベース R9.2.0以降の場合、以下のアカウントが有効な状態でインストールされる。SYSとSYSTEM以外の必要のないアカウントがある場合は、アカウントロックの指定を行う必要がある。アカウントロックについては、インストール時は、GUIで設定することができる。それ以外の場合でも、SQL*Plusから設定を行うことができる。

アカウント名 説明
SYS データベース・データ・ディクショナリの所有者(必須)
SYSTEM Oracle関連ツールが使う内部表の所有者(必須)
DBSNMP Oracle Intelligent AgentなどSNMPを利用するサービスのユーザー
SCOTT Oracleでは古くなら利用されているサンプルデータベースユーザー。ちなみにデフォルトのパスワードはTIGERです。これも有名で……
表1 初期インストールアカウントの解説
ALTER USER ユーザー名 
PASSWORD EXPIRE ACCOUNT LOCK;
図3 SQL*Plusからのアカウントロックの設定方法

コラム システム管理者の認証方式

Oracleデータベースには、データベースの停止や起動などの操作を行うデータベース管理者の認証方式には2つの方式がある。オペレーティングシステムの認証を設定して利用するOS認証とOracleデータベース独自で作成するパスワードファイルを利用したものになる。

まず、OS認証は、パラメータREMOTE_LOGIN_PASSWORDFILEをNONEに設定して利用することになる。パスワードファイル認証は、パラメータREMOTE_LOGIN_PASSWORDFILEをSHAREDまたはEXCLUSIVEと設定することで利用できる(Oracle 9iデータベース R9.2.0では、初期インストール時は、パスワードファイルによる認証が設定されている)。

筆者自身は、OS認証を利用している。理由としては、ローカルマシン以外からシステム管理者としてサーバにログインする必要がない点とOS部分をサーバ要塞化でしっかりとしたセキュリティ対策を行うことでOSからOracleデータベースまで矛盾のないポリシーの作成ができるという点でメリットがあると考えているからだ。ただし、利用環境によって、どちらの認証方式を採用するかは、運用担当者の方が選択されればよいかと思う。


・プロファイルについて

さらに、アカウントのセキュリティを高めるプロファイル(プロファイルとは、システム・リソースおよびパスワードの制限の設定をまとめたもので、ユーザーとロールのような関係)を利用することで、パスワード管理の制御を行うことができる。CREATE PROFILEコマンドを利用することで、パスワード管理を行うことができる。

ALTER PROFILE DEFAULT LIMIT 
PASSWORD_LIFE_TIME 60 
PASSWORD_GRACE_TIME 10 
PASSWORD_REUSE_TIME 1800 
PASSWORD_REUSE_MAX UNLIMITED 
FAILED_LOGIN_ATTEMPTS 10 
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;
図4 PROFILE設定例

コラム パスワード確認ファンクション

PASSWORD_VERIFY_FUNCTIONについては、Oracle9iデータベース側で複雑さを確認するためのutlpwdmg.sqlというスクリプトによって作成されるプロシージャが提供されている。このスクリプトを利用するパスワードの入力について、より細かなパスワード確認を行うことができる。なお、このスクリプトを利用するとALTER PROFILEコマンドが実行されて以下のようにプロファイルが変更される。

・パスワードは、最小4文字であること

・パスワードは、1文字以上の英字、1文字以上の数字、1文字以上の記号を含むこと

・パスワードは、ユーザー名と同じものでないこと

・パスワードは、前回変更したパスワードから3文字以上違いがあること

表2 utlpwdmg.sqlによって提供されるパスワード確認機能
設定項目 詳細
PASSWORD_LIFE_TIME パスワードを変更すべき最長期間
PASSWORD_GRACE_TIME パスワード変更までの猶予期間(この間にユーザーはパスワードを変更しなければいけない)
PASSWORD_REUSE_TIME 指定期間内ユーザーがパスワードを再使用できなくする
PASSWORD_REUSE_MAX 前に利用したパスワードが再利用可能になるまでの回数
FAILED_LOGIN_ATTEMPTS 設定値に到達すると、自動的にアカウントがロックされる
PASSWORD_LOCK_TIME ロックされたアカウントが自動的に解除されるまでの時間
PASSWORD_LOCK_TIME パスワードの入力失敗時にアカウントがロックされる期間
PASSWORD_VERIFY_FUNCTION パスワードを複雑にするプロシージャを指定する
表3 プロファイル設定項目

 次に、データベースオブジェクトに関するセキュリティ設定について説明を行う。まず、基本として、各オブジェクト(テーブル、ビュー、インデックスなど)に対してユーザーごとに適切なアクセス権を設定する。

●データベースオブジェクト関連のセキュリティ対策作業

 システム権限とオブジェクト権限を確認することで、セキュリティを高めることがさらにできるだろう。この部分は、アプリケーションの作りによって、大きくポリシーが異なってくる部分でもあるので、データベース管理者とアプリケーション開発者の間での十分な調整が必要なる部分だと思われる。

・システム権限の付与について

各アプリケーションで利用するユーザーのシステム権限(以下のコラム「システム権限とオブジェクト権限について」を参照)についても、アプリケーションでのユーザーに必要となる権限を検討したうえで、必要最低限のシステム権限が設定されているかを確認する必要がある。

例えば、アプリケーション上での検索しか行わないユーザーにCREATE ANY TABLE権限(すべてのテーブルオブジェクトに対して管理を行うことができる権限)を付与することはセキュリティ上、好ましくないだろう。

・オブジェクト権限の付与について

開発するアプリケーションごとにデータベース上にユーザーを作成することがあるが、その際には、必要最低限のオブジェクト権限を付与することで、特に内部ユーザーによる不正アクセスを未然に防ぐことができる。

つまり、アプリケーションを利用しているユーザーに対しても適切な権限を付与することをお勧めする(先に説明したが、アプリケーションの利用方法に精通していないとどのオブジェクトにアクセスできればよいのかという見極めが難しいので、データベース管理者だけが行うのではなく、アプリケーション開発者との共同作業になるのではないだろうか?)。

オブジェクト権限は、システム権限と密接にかかわっている。システム権限でCREATE SESSION権限(データベースへ接続を許可する権限)があたられている場合でも、ある特定の表オブジェクトへのSELECTのオブジェクト権限(表からSELECTする権限)が与えられていない場合は、その表に対してSELECTすらすることができない。その意味で、社内からの不正アクセスを防ぐもっとも有効なセキュリティ対策といえるかもしれない。

コラム システム権限とオブジェクト権限について

権限には、2つの種類がある。システム権限とオブジェクト権限の関係は、システム権限があって、そのうえでオブジェクト権限がある。つまり、システム権限で適切な権限が付与したうえで、オブジェクト権限を正しく設定できれば、社内における不正アクセスなどのリスクに対して、ある程度の予防的な措置が取ることができる場合がある(最終的には、Oracle9iデータベースなどで提供される監査などテーブルなどへのアクセスをトリガーにするロギング機能を利用する必要がある)。

システム権限およびオブジェクト権限には、権限を付与されたユーザーが、自分以外のユーザーに権限を付与できるようにするための、WITH ADMIN OPTIONというものもある。詳しくは、「Oracle 9iデータベース管理者ガイド」などを確認してほしい。

権限 詳細
システム権限 ユーザーのデータベース内での操作のすべてに関する権限を規定している。表やビューなどの作成権限もここに含まれる
オブジェクト権限 ユーザーが所有する表やビューなどのオブジェクトへのほかのユーザーの操作権限を規定している
表4 システム権限とオブジェクト権限

●そのほかのセキュリティ対策作業
(初期化パラメータおよびセキュリティパッチの適用)

・初期化パラメータについて

最後に、セキュリティにかかわる初期化パラメータについて確認しておこう。Oracle9iデータベース R9.2.0では、ここで説明する初期化パラメータのセキュリティ項目については、すでに対策が行われている。

(1)O7_DICTIONARY_ACCESSIBILTY(Oracle9iでは、FALSE)

Oracle7との互換性のために残されている設定。この設定が有効になっていると、SYSが所有しているデータベースオブジェクト(例 DBA_XXX)にアクセスすることができてしまう。

(2)OS_AUTHENT_PREFIX(Oracle9iでは、FALSE)

OSの認証を利用することで、OSとOracleデータベースの認証を統合することができる。ただし、下位互換のOPS$を指定した場合、リモートホストからの接続も可能になるため注意が必要だ。

(3)REMOTE_OS_AUTHENT(Oracle9iでは、FALSE)

リモートのオペレーション・システムでユーザー認証が可能。このパラメータが有効になっている場合、データベースは、すべてのクライアントを暗黙的に許可してしまう。

・セキュリティパッチの適用について

以前はOracle Technology Network(OTN)からセキュリティ情報とともにセキュリティパッチの取得も可能だったが、現在は、保守契約をされている方のみへの提供になっている。セキュリティ対策の面からもサポート契約を締結する必要があるだろう。 


 いかがだっただろうか? 今回の記事を読んでいただくことで、Oracle9iデータベース導入後のセキュリティ設定項目の概要を理解できたかと思う。セキュリティ対策で重要なのは、むやみやたらに対策を行うのではなく、必要最低限の作業で、最大限の効果を出すことである。特に、Oracleデータベースオブジェクトのセキュリティ対策については、PUBLIC権限の排除などが説明されている書籍もあるが、必要最低限の作業ということで紹介した。さらに、詳しい情報については、Oracle Technology Network Japan上でOracleデータベースのオンラインマニュアルなどをご覧いただくことで、詳細情報を得られるだろう。

 次回は、Oracleデータベースのより高度なセキュリティ機能を紹介したいと思う。

筆者Profile

株式会社インターネット総合研究所 主任研究員。

篠田道明(しのだ みちあき)

大学時代に社会福祉を学び、現在は、ITコンサルタントとして、活動中。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。