トップ > DBA中級 > 4章
4章 セキュリティとプロファイル
本章はユーザ・セキュリティについて学んでいきます。

昨今、個人情報の流出や、なりすましなどによるデータの改ざんなど、
多くのセキュリティ事故が見られます。DBには個人情報も格納されており、
この情報を守るため、管理者もセキュリティに対し十分考慮する必要があります。

本章を通してDBの認証方法、プロファイルの使用方法を学んでいきましょう。

データベースの認証



データベースの認証方法は以下の方法がサポートされています。

・パスワード認証
・OS認証
・外部認証

外部認証はサードパーティ(Oracle以外の製品)を使用して、高度な認証を使用する
機能です。例えば指紋認証などセキュリティを厳重にする場合に使用します。
今回はOracle標準機能であるパスワード認証とOS認証についてご紹介していきます。

パスワード認証


これはもっとも簡単な方法でセキュリティを強固にできる認証です。
データベースに接続するときにパスワードを入力することで、
限られたユーザのみデータベースにアクセスさせることができます。

[構文] パスワード認証
 $ sqlplus ユーザ名/パスワード[@接続文字列] [as sysdba]

この認証方法はいつも通りの認証方式ですね。
パスワードの変更はALTER USERコマンドで変更が可能です。

[構文] パスワードの変更
 SQL> ALTER USER ユーザ名 IDENTIFIED BY パスワード;

一般ユーザのパスワードはDBのテーブルにて格納されます。
管理者のパスワードはDBの外部に格納されます。
DBの外部に格納する必要があるのは、管理者はDBが停止しているときも
ログインする必要があるからです。
管理者のパスワードのファイルは以下のディレクトリに存在します。

パスワードファイル
$ORACLE_HOME/dbs/orapwSID名

上記のパスワードファイルを作成するためには以下のコマンドを使用します。

$ orapwd FILE=filename ENTRIES=max_users FORMAT=12
※FORMAT=12の場合はパスワードの大文字小文字が区別されます。

orapwdコマンドの詳しい情報はマニュアルを参照ください。
Oracle Database管理者ガイド

またパスワードファイルを使用したログインを許可する為には、
REMOTE_LOGIN_PASSWORDFILEをEXCLUSIVEに設定します。
(デフォルトはEXCLUSIVEです。)


OS認証


OS認証はOSのログインが完了しているため、DBはパスワードなしでログインを
許可するという認証方法です。またOS認証を使用できるユーザはOracleインスト
ール時に選択したOSグループでないといけません。インストール時にdbaというOSグループを指定した場合は、そのグループに所属している必要があります。

OUI

上記のOUI画面のデータベース管理者グループに属している必要があります。

[構文] OS認証
 $ sqlplus / [as sysdba]

OS認証が可能なのは、DBがローカルに存在する場合のみです。リモートにDBが存在した場合はOS認証はできません。
リモートから管理者権限で接続する為にはパスワードを使用した認証方式です。


プロファイルの概要


プロファイルはパスワード管理やリソースの制御を行う機能です。
同じパスワードを使い続けるのはセキュリティ的に良くありません。
プロファイルはパスワードを定期的に変更させたり、同じパスワードを使えないようにしたり、 またCPU時間などを制御することができます。

プロファイルの機能は大きく2つの項目を制御することができます。

・パスワード管理
・リソース制御


パスワード管理の項目



プロファイルを使用するとパスワードの管理を行うことができます。
パスワード管理で使用できる項目は以下の通りです。

FAILED_LOGIN_ATTEMPTS
(パスワード失敗回数)
同じアカウントでログインに連続して失敗できる回数を指定。10回がデフォルト。
PASSWORD_LIFE_TIME
(パスワード有効期限)
同じパスワードを使用できる日数を指定。180日がデフォルト。
PASSWORD_REUSE_TIME
(同パスワード再利用可能日数)
同じパスワードを再利用できるまでの日数を指定。UNLIMITEDがデフォルト。
PASSWORD_REUSE_MAX
(同パスワード再利用可能変更回数)
同じパスワードを再利用できるまでに必要な、パスワードの変更回数を指定。UNLIMITEDがデフォルト。
PASSWORD_LOCK_TIME
(ログイン失敗後のロック期間)
ログインに失敗し、アカウントがロックされた後のロック解除日数を指定。
1日がデフォルト。
PASSWORD_GRACE_TIME
(パスワード変更猶予日数)
猶予期間の日数を指定します。
PASSWORD_LIFE_TIMEの日数を過ぎてもパスワード変更しない場合のログイン猶予日数を指定。7日がデフォルト。
PASSWORD_VERIFY_FUNCTION
(パスワード複雑度チェック)
パスワードで使用する文字の複雑度をチェックします。

PASSWORD_REUSE_TIMEが30でPASSWORD_REUSE_MAXが10の時は
同じパスワードを再利用できるまで、30日が経過し、パスワードを10回変更しないと、同じパスワードを使用できません。

PASSWORD_VERIFY_FUNCTIONはパスワードの複雑性をチェックします。
標準で提供されているプログラムを使用するか、PL/SQLで自分で作成したプログラムを使用します。
標準で提供されているのは、verify_function_11G、ora12c_verify_functionおよびora12c_strong_verify_functionの3つです。

例えば、verify_function_11Gは以下のパスワード要件です。

・パスワードの長さが8文字以上30文字以内であること。
・パスワードがユーザー名と同一でないこと。
・ユーザー名を逆にしたり、ユーザー名に数字1から100を追加したパスワードでないこと。
・サーバー名と同一であったり、サーバー名に数字1から100を追加したパスワードでないこと。
・パスワードを単純にしすぎないこと (oracle、数値1から100を追加したoracle、welcome1、
 database1、account1、user1234など)。
・パスワードに少なくとも数字が1つと英字が1つ含まれていること。
・以前のパスワードとの違いが3文字以上あること。
・パスワードは二重引用符文字(")を含まない。ただし、二重引用符で囲むことは可能。

その他はマニュアルを参照してください。
Oracle DatabaseSQL言語リファレンス



リソース制御の項目


リソース制御はCPUの使用時間や接続時間などを制限します。 リソース制御で行える項目は以下の通りです。

SESSIONS_PER_USER ユーザーを制限する同時セッションの数を指定。
CPU_PER_SESSION 1セッション当たりのCPU時間制限を指定。この値は100分の1秒単位で指定。
CPU_PER_CALL 1コール当たりのCPU時間制限を指定。この値は100分の1秒単位で指定。
CONNECT_TIME 1セッション当たりの合計経過時間制限を指定。この値は分単位で指定します。
IDLE_TIME セッション中のアイドル時間の長さを制限します。この値は分単位で指定。
LOGICAL_READS_PER_SESSION メモリーおよびディスクから読み込まれるブロックなど、1セッション中に読み込まれるデータ・ブロックの数の制限を指定。
PRIVATE_SGA 1つのセッションでシステムグローバル領域(SGA)の共有プール内に割り当てることができるプライベート領域の大きさを指定。
COMPOSITE_LIMIT 1セッション当たりのリソースの総コストをサービス単位で指定。


デフォルトプロファイル


DB作成時はデフォルトでDEFAULTというプロファイルが作成され、
ユーザはデフォルトでDEFAULTプロファイルが割り当てられています。

DEFAULTプロファイルはリソース制御は無制限(UNLIMITED)となっていますが、
パスワード管理は以下の設定となっています。

FAILED_LOGIN_ATTEMPTS 10回
PASSWORD_LIFE_TIME 180日
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_LOCK_TIME 1日
PASSWORD_GRACE_TIME 7日
PASSWORD_VERIFY_FUNCTION なし


プロファイルの作成


ではプロファイルを作成する構文を確認していきましょう。

[構文] プロファイルの作成
 CREATE PROFILE プロファイル名 LIMIT
  [FAILED_LOGIN_ATTEMPTS 値]
  [PASSWORD_LIFE_TIME 値]
  [PASSWORD_REUSE_TIME 値]
  [PASSWORD_REUSE_MAX 値]
  [PASSWORD_LOCK_TIME 値]
  [PASSWORD_GRACE_TIME 値]
  [PASSWORD_VERIFY_FUNCTION 値]
  [SESSIONS_PER_USER 値]
  [CPU_PER_SESSION 値]
  [CPU_PER_CALL 値]
  [CONNECT_TIME 値]
  [IDLE_TIME 値]
 …  ※構文は一部を抜粋しています。

プロファイルの作成には使用する項目だけを指定すれば良いです。

  SQL> CREATE PROFILE test_profile LIMIT
    2  FAILED_LOGIN_ATTEMPTS 2
    3  PASSWORD_LOCK_TIME 1/1440;

  Profile created.
 

今回はログイン失敗回数を1回、パスワードロック時間を1/1440(5分)にしました。
作成したプロファイル情報はDBA_PROFILESで確認できます。

  SQL> select * from dba_profiles
    2  where profile='TEST_PROFILE';

  PROFILE        RESOURCE_NAME               RESOURCE LIMIT        COM
  -------------- --------------------------- -------- ------------ ---
  TEST_PROFILE   COMPOSITE_LIMIT             KERNEL   DEFAULT      NO
  TEST_PROFILE   SESSIONS_PER_USER           KERNEL   DEFAULT      NO
  TEST_PROFILE   CPU_PER_SESSION             KERNEL   DEFAULT      NO
  TEST_PROFILE   CPU_PER_CALL                KERNEL   DEFAULT      NO
  TEST_PROFILE   LOGICAL_READS_PER_SESSION   KERNEL   DEFAULT      NO
  TEST_PROFILE   LOGICAL_READS_PER_CALL      KERNEL   DEFAULT      NO
  TEST_PROFILE   IDLE_TIME                   KERNEL   DEFAULT      NO
  TEST_PROFILE   CONNECT_TIME                KERNEL   DEFAULT      NO
  TEST_PROFILE   PRIVATE_SGA                 KERNEL   DEFAULT      NO
  TEST_PROFILE   FAILED_LOGIN_ATTEMPTS       PASSWORD 2            NO
  TEST_PROFILE   PASSWORD_LIFE_TIME          PASSWORD DEFAULT      NO
  TEST_PROFILE   PASSWORD_REUSE_TIME         PASSWORD DEFAULT      NO
  TEST_PROFILE   PASSWORD_REUSE_MAX          PASSWORD DEFAULT      NO
  TEST_PROFILE   PASSWORD_VERIFY_FUNCTION    PASSWORD DEFAULT      NO
  TEST_PROFILE   PASSWORD_LOCK_TIME          PASSWORD .0034        NO
  TEST_PROFILE   PASSWORD_GRACE_TIME         PASSWORD DEFAULT      NO

  16 rows selected.
 

では作成したプロファイルをユーザに設定します。
作成したプロファイルをユーザに付与する場合は、以下のコマンドを使用します。

[構文] プロファイルの付与
 SQL> ALTER USER ユーザ名 PROFILE プロファイル名;

では実際に一般ユーザに割り当ててプロファイルを割り当てて、試してみます。


  SQL> alter user ora profile test_profile;

  User altered.

  SQL> conn ora/wrongpass
  ERROR:
  ORA-01017: invalid username/password; logon denied


  SQL> conn ora/wrongpass
  ERROR:
  ORA-01017: invalid username/password; logon denied


  SQL> conn ora/wrongpass
  ERROR:
  ORA-28000: the account is locked
 

ORAユーザにTEST_PROFILEを割り当てて、誤ったパスワードでログインしました。
2回失敗した後、3回目でアカウントロックさました。
今回の設定では5分後にロックは解除されますが、
手動でアカウントロック解除をしたい場合は、以下のコマンドで実施します。


  SQL> show user
  
  USER is "SYS"

  SQL> alter user ora account unlock;

  User altered.
  

またアカウントを手動でロックしたい場合は、unlockではなくlockで実行できます。

[構文] ユーザアカウントのロック、アンロック
 SQL> ALTER USER ユーザ名 ACCOUNT [LOCK | UNCLOK];


プロファイルの削除


プロファイルを削除する場合は、以下のコマンドを使用します。

[構文] プロファイルの削除
 SQL> DROP PROFILE プロファイル名 [CASCADE];

CASCADEオプションは既に割り当てられているプロファイルを削除する場合に
使用します。また割り当てられているプロファイルが削除されると、
そのユーザのプロファイルはDEFAULTプロファイルを使用します。

では最後にプロファイルを削除してみたいと思います。

  SQL> drop profile test_profile ;
  
  drop profile test_profile
  *
  ERROR at line 1:
  ORA-02382: profile TEST_PROFILE has users assigned, ]
  cannot drop without CASCADE

  SQL> drop profile test_profile cascade;

  Profile dropped.
 

削除できました。以上がプロファイルについての内容となります。お疲れ様でした。