COL: CSS:



安全なインストールと運用

DB 操作の監査安全なインストールと運用パスワード管理ポリシー

セキュリティの維持

情報セキュリティ / プライバシ / 企業資産とデータ保護に関して,Oracle Database の運用上最低限しておくべき主なものは以下のような事項である。

不要なものはインストールしない
カスタム・インストールでインストールを行い,不要なオプション / 製品をインストールするのを避ける。もし標準インストールを選択した場合,インストール完了後に不要なオプションや製品を削除し,セキュリティ向上を目指す。
デフォルトのユーザ・アカウントロック
Oracle Database インストール時には,事前設定されているデフォルトのユーザ・アカウントも多数インストールされる。それらはデータやオブジェクトの所有者としてのユーザであり,そのユーザでログインできる状態のまま放置しておくのは危険。
事前設定のユーザ・パスワードは変更する
インストール直後は,デフォルトのユーザ・アカウントにデフォルト・パスワードが使用されており,変更しないと危険。
データ・ディクショナリの保護
ANY システム権限を持つユーザは,デフォルトの状態でデータ・ディクショナリにアクセスすることができる。そのアクセス権は外す必要がある。
「最低限の権限」原則
以下の原則を実践する。
  • データベース・ユーザには必要最低限の権限だけを付与する
  • ユーザー・グループ PUBLIC から不要な権限 / ロールを削除する
効果的なアクセス制御
リモート認証は使用禁止 (デフォルトで FALSE) にしたほうが安全。使用可能だと,全クライアントがリモート認証システムで認証 (すなわち,クライアント PC 上で認証完了) されたとみなされ,データベースは暗黙的に全クライアントを信頼してしまう。Oracle Database に接続しているクライアントにサーバ・ベースの認証を付加するには,リモート認証を使用禁止にする。
/* Code060101: 初期化パラメータファイルの REMOTE_OS_AUTHENT パラメータ */

REMOTE_OS_AUTHENT = FALSE
                     └←デフォルトで FALSE。いじらないのがベスト

デフォルトのユーザ・アカウントロック

データやオブジェクトの所有者としてのユーザにロックをかける操作は,Database Configuration Assistant (DBCA) による DB 作成を行った際,ほとんどのデフォルト・ユーザに対し自動的にロック処理 (パスワード失効化) を行う※ Oracle Universal Installer (OUI) や Database Configuration Assistant (DBCA) によるデータベースのインストールでは,インストール中 SYS / SYSTEM ユーザのパスワード入力を求めるプロンプトが表示されるので,デフォルトのパスワードは使用できなくなる。

インストールが終了すると,SYS / SYSTEM ユーザもロック (期限切れ) し,管理用アクセス時は SYSDBA (データベース管理者) 権限か,またはSYSOPER (データベース・オペレータ) 権限を持つ管理用ユーザで操作する。

スクリプトを使った手動カスタムデータベース作成では Database Configuration Assistant (DBCA) は使用されない。つまり,全デフォルト・ユーザにロックがかかららない。そのため手動インストールを実行した場合,まずは SQL 文を使って SYS / SYSTEM / SCOTT / DBSNMP 以外のデフォルト・ユーザー・アカウント全てにロックをかける必要がある。

SYS / SYSTEM デフォルト・ユーザもロックし,SCOTT / DBSNMP デフォルト・ユーザに関しても,使用しないのであればロックする。アカウントが必要なときには,AS SYSDBA 句を用いたデータベース管理者権限を持ったユーザでログインし,必要なアカウントのロック解除 / 新パスワードを発行し,アカウントをアクティブにする。

データ・ディクショナリの保護

データ・ディクショナリとは,Oracle Database の中で最も重要な部分の 1 つで,データベースに関する情報を提供する読取り専用の表の集合であり,一般ユーザが直接データ・ディクショナリにアクセスできる設定だと,以下の理由で大変危険である

  • 機密性の高いデータにまでアクセスできてしまう。
  • データ・ディクショナリの一部を,偶然 / 故意に削除できる権限を持ってしまう。

データ・ディクショナリへのアクセス権限に関する対処は,以下の方法を使用する。

  • initSID.ora ファイルの O7_DICTIONARY_ACCESSIBILITY 初期化パラメータを FALSE に設定 (デフォルトで FALSE) し,一般ユーザが直接アクセスできないようにする。
  • 特定のユーザに対し,特定のデータ・ディクショナリのみ閲覧可能にするには,そのユーザに GRANT コマンドを使用して相応の権限を与える。
  • 特定の管理者に対し,全データ・ディクショナリへのアクセス許可を出すには,SELECT ANY DICTIONARY システム権限を付与する。

PUBLIC ユーザ・グループの編集

PUBLIC ユーザ・グループとは,Oracle Database 内の全ユーザーに付与されるデフォルト・ロールで,PUBLIC に付与された権限は,全データベース・ユーザーが利用できる。

PUBLIC に付与された権限の例として PL/SQL パッケージの EXECUTE 権限があり,この権限により,一般ユーザーが直接アクセスすることを許可されないファンクションにアクセスすることが可能になってしまう。そのせいで以下のパッケージにアクセスし,悪用される危険性がある。EXECUTE 権限は外し,必要なユーザ / ロールに付与するようにすれば危険性は減る。

Table060101: PUBLIC のEXECUTE 権限により悪用される危険のあるパッケージ
パッケージ名詳細
UTL_SMTP[機能] 任意のユーザー間で任意のメールを送信できる。
[危険] メール文書の不正な交換が可能になる。
UTL_TCP[機能] DB サーバから任意の受信 (待機) ネットワークに対し,接続を確立できる。
[危険] DB サーバと待機ネットワーク・サービス間で,任意のデータを送信できる。
UTL_HTTP[機能] DB サーバが HTTP を使用してデータを要求 / 取得できる。
[危険] HTML 形式を使用し,悪意のある Web サイトにデータ送信できてしまう。
UTL_FILE[機能] OS 上の任意ファイルに,テキスト・レベルでアクセスできる。
[危険] トレース・ファイルなど,OS 上の機密性の高いファイルに不正にアクセス。
DBMS_RANDOM[重要] 格納されているデータを暗号化できる。
[危険] 鍵が安全に生成 暗号化されたデータはリカバリできないことがある。

以下のデータ・ディクショナリを見れば,PUBLIC ユーザ・グループに付与されている権限を確認できる。

Table060102: PUBLIC ユーザ・グループに付与されている権限
データ・ディクショナリ確認できる権限
DBA_SYS_PRIVSPUBLIC ユーザ・グループに付与されたシステム権限
DBA_TAB_PRIVSPUBLIC ユーザ・グループに付与されたオブジェクト権限
DBA_ROLE_PRIVSPUBLIC ユーザ・グループに付与されたロール