検索
連載

Oracleのネットワークのサーバ側構成とは?ORACLE MASTER Silver DBA講座(14)

ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 本連載第12回「パスワード管理でOracleデータベースを守る」、第13回「監査でOracleデータベースのセキュリティ管理」で、Oracleデータベースのセキュリティについて学びました。今回から2回にわたって、Oracle Net Servicesを紹介します。

Oracle Net Services:リスナー

ポイント

 Oracle Netのサーバ側構成が対象です。デフォルトリスナーの特徴、リスナーを追加作成する方法、lsnrctlコマンドラインユーティリティによる管理作業を理解しておきましょう。lsnrctlコマンドラインユーティリティによるリスナーの起動と停止については、第3回「Oracleデータベースの制御ツールを使い倒す」も参照しておいてください。

リスナーのセキュリティ

 リスナーにパスワードを設定することで、パスワードを知っているOSユーザーだけがリスナー管理を行えることになり、セキュリティが向上します。なお、デフォルトでは、リスナーを起動したOSユーザーだけがリスナーの管理を行うことができます。

 リスナーにパスワードを設定するには、Enterprise Manager、Net Manager、lsnrctlコマンドラインユーティリティのいずれかを使用します。

図1 Enterprise Managerによるパスワード設定(クリックで全体を表示します)
図1 Enterprise Managerによるパスワード設定(クリックで全体を表示します)

 パスワードが設定されると、listener.oraに次のようなパラメータが追加されます。

PASSWORDS_LISTENER = 1DF5C2FD0FE9CFA2

 パスワードが設定されているかどうかは、lsnrctlコマンドラインユーティリティのSTATUSコマンド結果でも確認できます。パスワードが設定されていない場合、STATUS結果は次のようになります。

LSNRCTL> status
‥‥
セキュリティ              ON: Local OS Authentication
‥‥

 一方、パスワードが設定されている場合、STATUS結果は次のようになります。

LSNRCTL> status
‥‥
セキュリティ              ON: Password or Local OS Authentication
‥‥

 パスワードが必要なコマンドでは、パスワードをセット後にコマンドを実行することが可能になります。

LSNRCTL> reload
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mars)(PORT=1521)))に接続中
TNS-01190: ユーザーに、リクエストされたリスナー・コマンドを実行する権限がありません
LSNRCTL> set password
Password:
コマンドは正常に終了しました。
LSNRCTL> reload
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mars)(PORT=1521)))に接続中
コマンドは正常に終了しました。

リスナーの追加

 ポート1521で動作するデフォルトリスナーは、listener.oraファイルを作成しなくても起動することができます。追加のリスナーが必要な場合は、listener.oraファイルにリスナーアドレスを追加します。リスナーを追加するには、listener.oraファイルを手動で変更するか、Enterprise Manager、Net Managerを使用します。

図1 Enterprise Managerによるリスナーの構成(クリックで全体を表示します)
図1 Enterprise Managerによるリスナーの構成(クリックで全体を表示します)

 複数のリスナーを構成し、クライアント側で接続可能にしておくことにより、選択したリスナーに障害があっても、別のリスナーを使用して接続することが可能になります。結果として可用性が向上します。

 リスナーを追加した場合、lsnrctlコマンドラインユーティリティを使用して管理するには、対象となるリスナー名を指定する必要があることに注意してください。各コマンドで対象リスナーを指定するほか、SET CURRENT_LISTENERコマンドを使用した現行リスナーの変更で対応することもできます。

LSNRCTL> status
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mars)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
‥‥
LSNRCTL> set current_listener LISTENER0
現行のリスナーは、LISTENER0です。
LSNRCTL> status
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mars)(PORT=1522)))に接続中
リスナーのステータス
------------------------
別名 LISTENER0
‥‥

問題

問題1

ホスト名とリスナー名が分かれば、どのユーザーもリスナーの停止やリスナー状態のチェックが可能です。この動作を制限する方法として適切なものを選択しなさい。

a.listener.oraファイルの保存場所を変更する
b.リスナーを隠す
c.リスナーにパスワードを設定する
d.デフォルトのリスナー名を使用しない

正解:c

解説

 前回、宿題とした問題です。

 lsnrctlコマンドラインユーティリティを使用した管理を制限するために、パスワードを設定することができます(正解c)。パスワードが有効化されている場合、まずSET PASSWORDコマンドでパスワードをセットしなければ管理操作ができません。

 なお、Oracle Database 10gでは、リスナーを起動したOSユーザーのみがすべての管理を行うことができ、それ以外のOSユーザーはパスワードをSETしなければ処理ができないようになっています。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:TNS_ADMIN環境変数を使用することで、起動時に使用するlistener.oraファイルの検索ディレクトリを設定できます。しかし起動後の制御はできないため、不正解です。

選択肢b:Oracle Netを使用した通信には、サーバ側のリスナーが必要です。デフォルトのポート1521を使用しないことでつなぎにくくなり、隠されているように見えるかもしれませんが、ポートスキャンされればどのポートを使用しているかは分かってしまうので、完全に隠すことはできないと思われます。

選択肢d:デフォルトのリスナー名はLISTENERです。lsnrctlコマンドラインユーティリティでの管理作業でデフォルト以外のリスナーを使用するには、コマンドの後にリスナー名を指定する、もしくはSET CURRENT_LISTENERコマンドにて現行リスナーを設定後、管理作業を行います。そのため、デフォルト以外のリスナー名を使用していれば、リスナー名が分からない限りは管理作業ができないことになります。しかし、listener.oraファイルやプロセスを確認するなどでリスナー名が分かってしまった場合は制限がされないことになるため、不正解としています。

問題2

現在起動しているL1リスナーでは、データベースDB1とDB2への接続設定が行われています。新規にデータベースDB3を作成し、このデータベースでは動的データベース登録は構成していません。

listener.oraファイルを変更後、ユーザーセッションに影響を与えることなく新規データベースDB3を認識させるリスナーコントロールユーティリティのコマンドを選択しなさい。

a.STOP、START
b.RELOAD
c.STOP L1、START L1
d.RELOAD L1

正解:d

解説

 リスナーコントロールユーティリティ(lsnrctlコマンドラインユーティリティ)でlistener.oraファイルの再読み込みを行う際には、RELOADコマンドを使用します。対象がデフォルトリスナーのLISTENERではない場合は、明示的にリスナー名を指定するか(正解d)、先にSET CURRENT_LISTENERコマンドにて現行リスナーにセットしておく必要があります。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a、b:問題では、L1というデフォルトでないリスナーを使用しています。そして、明示的にSET CURRENT_LISTENERコマンドを発行したとは記述されていません。従って、これらのコマンドはLISTENERデフォルトリスナーに対して発行されたことになります。

選択肢c:STOP、STARTでもlistener.oraファイルは再読み込みできますが、STARTするまではリスナーに対する新規接続ができません。接続済みのセッションにはリスナーは影響を与えませんが、新規セッションに影響を与えてしまうことを考慮すると、問題文の「セッションに影響を与えることなく」に反するため、不正解としています。

問題3

リスナーコントロールユーティリティを使用するときに、リスナー名を指定しなくてもコマンドを実行できるようにする方法を選択しなさい。

a.常にリスナー名を指定する必要がある
b.SET CURRENT_LISTENERコマンドにて現行リスナーを設定する
c.LISTENERという名前のリスナー以外はリスナー名を指定する必要がある
d.リスナーコントロールユーティリティの起動時に引数としてリスナー名を指定しておく

正解:b

解説

 デフォルトのリスナー名であるLISTENERではない名前のリスナーを操作するには、コマンドにリスナー名を追加するか、SET CURRENT_LISTENERコマンドにて現行リスナーとしてリスナー名をセット後(正解b)、作業します。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:SET CURRENT_LISTENERコマンドにて現行リスナーをセットしていれば、リスナー名を指定しなくても現行リスナーが対象になります。

選択肢c:現行リスナーを明示的に設定した場合は、デフォルトリスナーであるLISTENERという名前のリスナーに対する作業も、リスナー名を指定する必要があります。

選択肢d:リスナーコントロールユーティリティ(lsnrctlコマンドラインユーティリティ)は、ユーティリティを起動した後、EXITするまで任意のコマンドを実行することができます。このとき、起動時にリスナー名をセットする方法はありません。起動後にSET CURRENT_LISTENERコマンドでリスナー名をセットする必要があります。なお、起動と同時にコマンドを渡し、バッチモードで動作する場合は、リスナー名を渡すことができますが、動的に任意のコマンドを渡す方法とはいえないため、不正解としています。

宿題

 次回は今回に引き続き、Oracle Net Servicesを確認します。次の宿題を解いておいてください。

問題

IPアドレスなどの変更が多くあります。接続ロードバランスを使用する必要もあります。変更後のIPアドレスを利用する方法として最も簡単な方法を選択しなさい。

a.ホストネーミング
b.ローカルネーミング
c.簡易接続
d.ディレクトリネーミング

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、「Silver DBA(Oracle10g)」をはじめOracle関連の資格をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る