th0x4c 備忘録

[Oracle] パスワードの管理

目的

パスワードを大文字・小文字の区別をするようにする。 DB のパスワードについてはその他複雑なパスワードにするように強制する。

環境

  • OS: Oracle Enterprise Linux 5.8
  • DB: Oracle Database 11g Release 2 (11.2.0.3)

マニュアル

SYSDBA でのログイン時のパスワード

SYSDBA でのログイン(SYS ユーザで as sysdba でのログイン)時のパスワードを大文字・小文字の区別させるためにパスワードファイル($ORACLE_HOME/dbs/orapw<ORACLE_SID>)を再作成する。

orapwdを引数なしで実行すると、使い方が分かる。

$ orapwd
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

  where
    file - name of password file (required),
    password - password for SYS will be prompted if not specified at command line,
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional),
    ignorecase - passwords are case-insensitive (optional),
    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

  There must be no spaces around the equal-to (=) character.

ignorecase=n で再作成すれば大文字・小文字が区別される。 ちなみにパスワードファイルのファイル名は orapw<ORACLE_SID> でなければならない。

$ cd $ORACLE_HOME/dbs
$ rm orapwPROD1
$ orapwd file=orapwPROD1 password=oracle ignorecase=n

大文字・小文字が区別されるか確認。

SQL> connect sys/oracle@PROD1 as sysdba
Connected.
SQL> connect sys/ORACLE@PROD1 as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.

DB ユーザのパスワード

大文字・小文字の区別

DB ユーザのパスワードの大文字・小文字を区別するためには初期かパラメータ SEC_CASE_SENSITIVE_LOGONTRUE にする。(デフォルトは TRUE)

SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;

System altered.

複雑なパスワードを強制

$ORACLE_HOME/rdbms/admin/utlpwdmg.sql を実行することで、デフォルトのプロファイルを使用するユーザがパスワード変更する際に以下がチェックされるようになる。

  • パスワードの長さが8文字以上30文字以内であること。
  • パスワードがユーザー名と同一でないこと。ユーザー名のスペルを逆にしたり、ユーザー名に数字を追加したパスワードでないこと。
  • サーバー名と同一であったり、サーバー名に数字1から100を追加したパスワードでないこと。
  • 単純なパスワードでないこと(例: welcome1、database1、account1、user1234、password1、oracle、oracle123、computer1、abcdefg1、change_on_install)。
  • パスワードに少なくとも数字が1つと英字が1つ含まれていること。
  • 以前のパスワードとの違いが3文字以上あること。

$ORACLE_HOME/rdbms/admin/utlpwdmg.sql の内容を確認すると分かるように、パスワード検証関数 verify_function_11G が作成されてデフォルトプロファイル(DEFAULT)が変更されている。(パスワードの存続期間等も設定される)

$ cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
...(*snip*)

-- This script sets the default password resource parameters
-- This script needs to be run to enable the password features.
-- However the default resource parameters can be changed based
-- on the need.
-- A default password complexity function is also provided.
-- This function makes the minimum complexity checks like
-- the minimum length of the password, password not same as the
-- username, etc. The user may enhance this function according to
-- the need.
-- This function must be created in SYS schema.
-- connect sys/<password> as sysdba before running the script

CREATE OR REPLACE FUNCTION verify_function_11G
...(*snip*)
END;
/

-- This script alters the default parameters for Password Management
-- This means that all the users on the system have Password Management
-- enabled and set to the following values unless another profile is
-- created with parameter values set to different value or UNLIMITED
-- is created and assigned to the user.

ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION verify_function_11G;
...(*snip*)

ということで、utlpwdmg.sql を実行する。

$ sqlplus '/as sysdba'
SQL> @?/rdbms/admin/utlpwdmg.sql

Function created.


Profile altered.


Function created.

他のプロファイルも変更する場合は、ALTER PROFILE を実行する必要がある。

SQL> ALTER PROFILE <profile名> LIMIT
     PWSSWORD_VERIFY_FUNCTION verify_function_11G;

実際にパスワードを変更してチェックに引っかかるか確認してみる。

SQL> alter user scott identified by tiger;
alter user scott identified by tiger
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20001: Password length less than 8

[Oracle] 自動診断リポジトリの設定

目的

Oracle Database のログ出力先を変更する。

環境

  • OS: Oracle Enterprise Linux 5.8
  • DB: Oracle Database 11g Release 2 (11.2.0.3)

マニュアル

設定

Oracle Database 11gR1 より、各種ログの出力先が”自動診断リポジトリ(Automatic Diagnostic Repository, ADR)“という構造になった。

  • Oracle Database のログ

Oracle Database のログの出力先は初期化パラメータ DIAGNOSTIC_DEST にて設定する。 例えば、/home/oracle 配下に変更する場合は以下のようにパラメータ変更を行う。 (動的に変更可能なので DB 再起動は不要。)

$ sqlplus '/as sysdba'
SQL> ALTER SYSTEM SET DIAGNOSTIC_DEST = "/home/oracle" SCOPE = BOTH;

System altered.

指定したディレクトリ配下に diag/rdbms ディレクトリが作成され、その配下に alert.log やトレースが出力される。

  • Listener のログ

Listener のログ出力先は listener.ora 内の ADR_BASE_<リスナー名> で設定する。

$ vi $ORACLE_HOME/network/admin/listener.ora # 以下を編集 or 追加
ADR_BASE_LISTENER = /home/oracle

設定を反映させるために Listener を再起動

$ lsnrctl stop
$ lsnrctl start

これで、指定したディレクトリ配下に diag/tnslsnr ディレクトリができて、その配下に listener.log が出力される。

  • Oracle Net Client のログ

Oracle Net Client のログは sqlnet.ora 内の ADR_BASE パラメータで設定する。

$ vi $ORACLE_HOME/network/admin/sqlnet.ora # 以下を編集 or 追加
ADR_BASE = /home/oracle

これで、ログ出力時は指定したディレクトリ配下に diag/clients ディレクトリができて、そこに出力される。

[Oracle] ダイレクト NFS クライアント

目的

OS の NFS クライアントのかわりに、Oracle の”ダイレクト NFS クライアント”を使用して NFS 上のファイルにアクセスするように Oracle の構成を変更する。

環境

  • OS: Oracle Enterprise Linux 5.8
  • DB: Oracle Database 11g Release 2 (11.2.0.3)

マニュアル

ダイレクト NFS クライアントの有効化

  • (マニュアルにある oranfstab ファイルの作成は NFS サーバへのアクセスするネットワーク・パスが複数あってロード・バランスやフェイルオーバする場合は必要だが、ネットワーク・パスが1つしか無い場合は不要だそうだ。)

  • libodm11.so の置き換え

$ORACLE_HOME/lib/libnfsodm11.so を元々存在する $ORACLE_HOME/lib/libodm11.so と置き換えるだけでよい。11gR2 ではこれを実行するために $ORACLE_HOME/rdbms/lib/ins_rdbms.mkdnfs_on というターゲットがある。11gR1 では、手動でコピーが必要だった。

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk dnfs_on

内容は libodm11.so をバックアップしておいて libnfsodm11.so と置き換えているだけ。

$ make -n -f ins_rdbms.mk dnfs_on
if [ ! -f /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libodm11.so.dummy ]; then \
        cp /u01/app/oracle/product/11.2.0/dbhome_1/lib/libodm11.so /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/libodm11.so.dummy; \
        fi
rm -f /u01/app/oracle/product/11.2.0/dbhome_1/lib/libodm11.so; cp /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnfsodm11.so /u01/app/oracle/product/11.2.0/dbhome_1/lib/libodm11.so
  • DB 再起動

設定変更を有効にするために DB インスタンスを再起動する。

ダイレクト NFS クライアントの無効化

  • libodm11.so の置き換え

バックアップしておいた libodm11.so を戻すだけでよい。11gR2 ではこれを実行するために $ORACLE_HOME/rdbms/lib/ins_rdbms.mkdnfs_off というターゲットがある。11gR1 では、手動でコピーが必要だった。

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk dnfs_off
  • DB 再起動

設定変更を有効にするために DB インスタンスを再起動する。

確認方法

ダイレクト NFS クライアントが有効な場合、DB 起動時に alert.log に以下の出力がある。

Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 3.0