オラクる。

oracle専門ブログにしてみようかな~っと

2015年01月

oss-security - Qualys Security Advisory CVE-2015-0235 - GHOST: glibc gethostbyname buffer overflow

linuxのcライブラリglibcに深刻な脆弱性があることが発表されました。
ライブラリの中のgethostbynameに脆弱性があり、それにちなんでGHOSTと名付けられました。
この脆弱性を利用することで、システムを乗っ取ることが可能となるので、極めて深刻度の高い脆弱性になるかと思われます。
また、対象も下記の通りで、とても広いので早急のパッチあてが望まれます。
対象かどうかは上記リンク先に確認のスクリプトが乗っています。

Debian 7 (wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6 & 7,Ubuntu 12.04

各ディストリビューションからパッチは既にリリースされています。
yum updateとかで、更新しちゃいましょう。

また、今後は内部にlinux OSを持つネットワーク機器などにも影響が及ぶことでしょう。
 

netmgrツールを利用することでリスナーの追加をGUIで行なうことが出来ます。

ORA_001

oracleユーザーでnetmgrコマンドを実行すると、ツールが起動します。
リスナーを追加するには、「リスナー」が選択された状態で「+」ボタンをクリックします。

ORA_002

リスナー名を入力します。

ORA_003

リスナーが追加されました。
追加されたリスナーが利用するアドレスを指定するため、「アドレスの追加」をクリックします。

ORA_004

リスナーが利用するプロトコル、ホスト、ポートを指定します。

ORA_005

監視するデータベースを追加する場合、上のドロップダウンリストから「データベースサービス」を選択します。

ORA_006

データベースの追加ボタンをクリックします。

ORA_007

監視するデータベースの情報を指定します。

ORA_008

設定を保存させるには、ファイルメニューから「ネットワーク構成の保存」をクリックします。
これで新しいリスナーが作成されました。

今日はEnterprise Managerを利用したリスナーの作成方法を確認します。
ユーザーはまずサーバのリスナーに接続してからインスタンスに接続します。

ORA_001

Enterprise Managerにログインし、リスナーのリンクをクリックします。

ORA_002

次の画面で、右下のNet Service管理をクリックします。

ORA_003

管理:リスナーが選ばれていることを確認して、実行ボタンをクリックします。

ORA_004

OSのユーザー情報を入力します。

ORA_005

リスナーの一覧が表示されます。
新規にリスナーを追加する場合、作成ボタンをクリックします。

ORA_007

新規リスナーの作成画面です。
「一般」タブで追加ボタンをクリックします。

ORA_006

接続するDBサーバのホスト名とポート番号を指定します。

ORA_009

「静的データベース登録」タブでは接続するDBの情報を登録します。
「追加」ボタンをクリックします。

ORA_008

DBのサービス名、ホームディレクトリ、SIDを記載します。

ORA_009

設定が完了したら、OKボタンをクリックします。
新しいリスナーが作成されます。

ORA_010

リスナーが追加されました。
作成後はリスナーが停止しています。
開始するにはアクション:開始/停止を選択して、実行ボタンをクリックします。

ORA_011

操作:開始となっていることを確認してOKボタンをクリックします。

ORA_012

開始されました。 

初期化パラメータにはSPFILEとPFILEの2種類があり、SPFILEはバイナリベース、PFILEがテキストベースのファイルになります。
PFILEはOracleデータベースを通じた値の変更が出来ない、RMANのバックアップの対象に含めることが出来ないなどの理由により、SPFILEの利用が推奨されています。
今日はsqlplusを利用した初期化パラメータの確認、変更の手順を確認してみます。

・確認
SQL> SELECT name, value FROM v$parameter
  2  WHERE name LIKE '%pool%';

NAME                           VALUE
------------------------------ ------------------------------
shared_pool_size               0
large_pool_size                0
java_pool_size                 0
streams_pool_size              0
shared_pool_reserved_size      16357785
buffer_pool_keep
buffer_pool_recycle
global_context_pool_size
olap_page_pool_size            0

9行が選択されました。 

初期化パラメータの確認はv$parameterやv$spparameterビューで確認することが出来ます。
v$parameterは現行のセッションで有効になっている初期化パラメータ、v$spparameterはSPFILEに記載されている初期化パラメータが確認できます。
またshow parameterコマンドでも確認は可能です。

SQL> show parameter pool

NAME                                 TYPE            VALUE
------------------------------------ --------------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size             string
java_pool_size                       big integer     0
large_pool_size                      big integer     0
olap_page_pool_size                  big integer     0
shared_pool_reserved_size            big integer     16357785
shared_pool_size                     big integer     0
streams_pool_size                    big integer     0 

・変更

 また、初期化パラメータには動的パラメータと静的パラメータがあり、動的パラメータは再起動せずにパラメータの変更が可能で、静的パラメータは再起動が必要になります。
また、動的パラメータにはセッションレベルのパラメータとシステムレベルのパラメータの2種類があります。
セッションレベルがセッション単位で変更できるパラメータで、システムレベルが全てのセッションに影響するパラメータです。

初期化パラメータの値を変更する場合はALTER SYSTEM SET構文を利用しますが、SCOPE句でセッションレベル(SCOPE=MEMORY)で変更するか、システムレベル(SCOPE=SYSTEM)で変更するかを選べます。
両方(SCOPE=BOTH)も可能です。

SQL> ALTER SYSTEM SET shared_pool_size=100m
  2  SCOPE=BOTH;

システムが変更されました。

SQL> show parameter pool

NAME                                 TYPE            VALUE
------------------------------------ --------------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size             string
java_pool_size                       big integer     0
large_pool_size                      big integer     0
olap_page_pool_size                  big integer     0
shared_pool_reserved_size            big integer     16357785
shared_pool_size                     big integer     100M
streams_pool_size                    big integer     0 
 
また、静的パラメータをセッションレベルで変更しようとするとエラーが出力されて変更できません。

 SQL> ALTER SYSTEM SET LOG_BUFFER=1000
  2  SCOPE=BOTH;
ALTER SYSTEM SET LOG_BUFFER=1000
                 *
行1でエラーが発生しました。:
ORA-02095: 指定した初期化パラメータを変更できません。

Oracleデータベースの起動には段階があり、停止時状態からNOMOUNT→MOUNT→OPENと経てデータベースが起動します。
それぞれの段階の役割について確認してみます。

・ NOMOUNT
SQL> STARTUP NOMOUNT
ORACLEインスタンスが起動しました。

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             633341944 bytes
Database Buffers          197132288 bytes
Redo Buffers                6590464 bytes

SQL> SELECT status FROM v$instance;

STATUS
------------------------------------
STARTED

SHUTDOWN状態からNOMOUNT状態に至ることで、以下の処理が実行されます。

初期化パラメータの読み込み
SGAの割り当て
バックグラウンドプロセスの起動
アラートログ、トレースファイルのオープン

STARTUP NOMOUNTで停止状態からNOMOUNT状態まで遷移します。
またv$instanceを確認することで現在の起動状態がわかります。
nomountの場合は「STARTED」と表示されます。

・MOUNT
SQL> ALTER DATABASE MOUNT;

データベースが変更されました。

SQL> SELECT status FROM v$instance;

STATUS
------------------------------------
MOUNTED 

NOMOUNT状態からMOUNT状態に遷移することで以下の処理が行なわれます。

制御ファイルのオープン
データファイルとREDOログファイルの情報を取得

また、MOUNT状態に遷移する場合、ALTER DATABASE MOUNT;を実行することで可能です。
またv$instanceは「MOUNTED」と表示されます。

・OPEN
SQL> ALTER DATABASE OPEN;

データベースが変更されました。

SQL> SELECT status FROM v$instance;

STATUS
------------------------------------
OPEN

MOUNT状態からOPEN状態に遷移することで以下の処理が行なわれます。

データファイルのオープン
REDOログファイルのオープン

これで「データベースが起動している」と言える状態になり、一般ユーザーがデータベースに接続できるようになります。
また、OPEN状態に遷移する場合、ALTER DATABASE OPEN;を実行することで可能です。
またv$instanceは「OPEN」と表示されます。 

このページのトップヘ