セキュリティの概要

Webコンテンツへのユーザー・アクセスを制御したり、システムへの侵入者からサイトを保護したりできることがきわめて重要です。この章では、Oracle Forms Servicesにおけるセキュリティのアーキテクチャと構成について説明します。

この節の内容は以下のとおりです。

WebLogic ServerまたはOracle HTTP ServerでSSL/TLSを有効にする方法の詳細は、『Oracle Fusion Middlewareの管理』Oracle Fusion MiddlewareでのSSLの構成に関する項を参照してください。

シングル・サインオン

Oracle Forms Servicesでのシングル・サインオンは、Oracle HTTP Server用のOracleモジュールであるwebgateを介して使用できます。webgateアクセス・クライアントは、Oracle Access Manager (OAM)に対してユーザーを認証します。

詳細は、「Oracle Access ManagerでのFormsサービスの使用」を参照してください。

Formsアプリケーションでは、データベース接続文字列がアプリケーションのリクエストとともに渡されます。渡されない場合は、ログイン・ダイアログが表示されます。シングル・サインオン環境でデータベース接続情報を取得するには、ユーザーのシングル・サインオン・サーバー名、認証されたユーザー名およびユーザーが起動をリクエストしているアプリケーション名を結合して作成される一意キーの値を、Formsサーブレットを使用してOracle Internet Directoryに問い合せます。

リソース・アクセス記述子(RAD)は、各ユーザーおよびアプリケーションに対して定義される、必要なデータベース接続情報を含むOracle Internet Directoryのエントリです。Forms ServletはRADからデータベース接続情報を読み取って、Forms Webアプリケーションを起動するコマンドラインとともに渡します。Forms認証はまだデータベース中心ですが、webgateおよびFormsサーブレットはWebベースの認証サーバー環境に統合されています。

詳細は、次を参照してください。

ユーザーおよびその権限のクラス

従来、Formsアプリケーションでは、アプリケーション・ユーザーの認証にデータベースが使用されています。シングル・サインオン(SSO)でOracle Forms Servicesを使用するには、ユーザー・アカウントとその接続情報がOracle Internet Directoryで利用可能である必要があります。Oracle Internet Directoryでは、PL/SQL、JavaまたはOracle Delegated Administration Servicesを使用した複数の方法でユーザー・データがプロビジョニングされます。Oracle Delegated Administration Servicesは、Oracle Single Sign-Onユーザーおよび委任管理者用のWebベースのユーザー・インタフェースであり、権限を持つOracle Internet Directoryのセルフサービス・データの管理に使用します。

Oracle Internet Directoryでユーザー・アカウントを作成した後は、ユーザーによるFormsアプリケーションの初回リクエスト時に、(このアプリケーションに必要なデータベース接続情報をユーザーが知っていることを前提として)リソース・アクセス記述子(RAD)のエントリを動的に作成できます。

もうひとつの選択肢は、Oracle Delegated Administration Servicesで作成可能なRADのエントリを使用することです。デフォルトのRADエントリには、Oracle Single Sign-Onで認証されるすべてのユーザーがアクセスできます。特定のFormsアプリケーションをWebで実行しているときに、すべてのユーザーが同じデータベース接続情報を共有している場合はデフォルトのRADを使用します。このように、ユーザーはそのOracle Single Sign-On接続情報によって個別に認証されますが、デフォルトのRADエントリで定義されたアプリケーションでは、すべてのユーザーが共通のデータベース接続(情報)を共有します。

ユーザー・アカウントのデフォルトのシングル・サインオン動作

デフォルトでは、認証サーバーが有効となり、プロキシ・ユーザーは使用されません。Oracle Formsユーザーは、認証サーバーで認証を行い、アイデンティティ・ストア(通常はOracle Internet Directory)からリソース・アクセス記述子を取得し、これらの資格証明を使用してデータベースに接続する必要があります。

データベース・プロキシ機能を使用するユーザー

シングル・サインオン・パラメータssoProxyConnectが新しく追加されました。これをtrueに設定すると、ユーザーはプロキシ・ユーザーとして接続できるようになります。ユーザーは認証サーバーでの認証を求められ、プロキシ・ユーザーのユーザー名とパスワードを保持するリソース・アクセス記述子が構成されます。データベース管理者は、プロキシ接続を許可するために、データベース構成を追加で実装する必要があります。

保護されるリソース

Formsアプリケーションに対してシングル・サインオンを有効化する場合、次の機能でFormsアプリケーションを保護できます。

  • Oracle Internet Directoryでの動的リソースの作成: 以前のOracle Forms Servicesの一部のリリースでは、特定のアプリケーションおよびユーザーでRAD定義が見つからない場合に、エラー・メッセージが表示され、認証済にもかかわらずユーザーはそのFormsアプリケーションを実行できませんでした。Oracle Forms Servicesのこのリリースでは、RAD定義が存在しない場合は、ユーザーがOracle Forms Servicesを構成してリアルタイムにこのアプリケーションのRADを作成できます。該当する作成ページにリダイレクトする機能は、シングル・サインオン・パラメータssoDynamicResourceCreateで実現されます。

  • シングル・サインオンを使用した場合のデータベース・パスワードの期限切れ: 以前のOracle Forms Servicesの一部のリリースでは、データベース・パスワードが期限切れの場合、Oracle Internet DirectoryのRAD情報は更新されませんでした。そのため、ユーザーは、Formsアプリケーションへの接続時にデータベース・パスワードを更新していました。Oracle Forms Servicesのこのリリースでは、Formsによるデータベース・パスワードの更新に伴ってOracle Internet DirectoryのRAD情報も自動的に更新されます。Oracle Forms Servicesのこの機能を使用するために、追加構成を行う必要はありません。

認証およびアクセス強制

ユーザーによるOracle Forms Services URLの初回リクエスト時など(パートナ・アプリケーションからのリクエスト時も含む)、Oracle Forms Servicesにおけるシングル・サインオン・サポートの認証フローの詳細は、「認証フロー」を参照してください。

セキュリティ構成

Oracle Forms Servicesのセキュリティの構成は、Oracle Fusion Middleware Controlで行われます。

Oracle Fusion Middleware Control画面ごとにオンライン・ヘルプを利用できます。詳細は、「Forms Servicesの構成と管理」および「Oracle Access ManagerでのForms Servicesの使用」を参照してください。

RADの保護

RADのセキュリティを強化し、OID管理者が閲覧できないようにするには、次のステップに従います。

  1. ---aci-change.ldif---で囲まれた内容をaci-change.ldifファイルにコピーします
    ---aci-change.ldif---
    dn: cn=Extended Properties,%s_OracleContextDN%
    changetype: modify
    delete: orclaci
    orclaci: access to attr=(orclUserIDAttribute,orclPasswordAttribute) by
    guidattr=(orclOwnerGUID)(read,search,compare,write) by
    dnattr=(orclresourceviewers) (read,search, compare, write) by
    groupattr=(orclresourceviewers) (read,search, write) by * (none)
    -
    add: orclaci
    orclaci: access to attr=(orclUserIDAttribute,orclPasswordAttribute)
    DenyGroupOverride by guidattr=(orclOwnerGUID)(read,search,compare,write) by
    dnattr=(orclresourceviewers) (read,search, compare, write) by
    groupattr=(orclresourceviewers) (read,search, write) by * (none)
    ---aci-change.ldif---
    

    ノート:

    aci-change.ldifの中で、orclaci: access to attr=から始まる行は、by * (none)で終わる単独の行なので途中に改行を入れないようにする必要があります。

  2. このLDIFファイルにある%s_OracleContextDN%を、レルム固有のOracleコンテキストが持つ識別名(DN)に置き換えます。

    たとえば、配布でのDNがdc=acme,dc=comである場合、レルム固有のOracleコンテキストはcn=OracleContext,dc=acme,dc=comです。

  3. OID層で次のコマンドを実行します。

    ldapmodify -p <port> -h <host> -D cn=orcladmin -q -v -f aci-change.ldif

  4. このコマンドでは、コマンドライン・パラメータとしてcn=orcladminパスワードを指定していないので、実行するとこのパスワードを要求するメッセージが表示されます。

これらの変更を取り消すには、.ldifファイルにある次の内容を使用して同じコマンドを実行します(前述のノートに留意してください)。

---aci-revert.ldif---
dn: cn=Extended Properties,%s_OracleContextDN%
changetype: modify
delete: orclaci
orclaci: access to attr=(orclUserIDAttribute,orclPasswordAttribute)
DenyGroupOverride by guidattr=(orclOwnerGUID)(read,search,compare,write) by
dnattr=(orclresourceviewers) (read,search, compare, write) by
groupattr=(orclresourceviewers) (read,search, write) by * (none)
-
add: orclaci
orclaci: access to attr=(orclUserIDAttribute,orclPasswordAttribute) by
guidattr=(orclOwnerGUID)(read,search,compare,write) by
dnattr=(orclresourceviewers) (read,search, compare, write) by
groupattr=(orclresourceviewers) (read,search, write) by * (none)
---aci-revert.ldif---

アプリケーションのURLセキュリティの管理

Oracle Formsアプリケーションは、ユーザーがURLを使用してアクセスするWeb配布のソリューションです。Oracle Formsアーキテクチャでは、Forms開発者は2種類の方法でFormsアプリケーションの実行方法を構成できます。ひとつは、パラメータとその値をURLで設定する方法です。もうひとつは、パラメータとその値をWeb構成(formsweb.cfg)で設定する方法です。

Web構成で設定したパラメータは、URLで設定したパラメータによりオーバーライドできます。Forms管理者はこのデフォルト動作をオーバーライドして、URLで使用可能なパラメータを完全に制御できます。

URLで使用可能にするパラメータを決定する際は、2つのシナリオを検討します。最初のシナリオは、管理者が、単にデフォルトのログイン・ウィンドウを使用したログインを常にユーザーに強制するURLでのUSERIDパラメータの使用を制限する場合です。2番目のシナリオは、CONFIG=MyAppのような少数のパラメータを除いて、URLでのすべてのパラメータの使用を管理者が禁止する場合です。

パラメータrestrictedURLparamsでは、Forms管理者は、formsweb.cfgファイル内のURLへアクセス可能なパラメータをユーザーの使用が制限されたものと見なすことができます。管理者は、名前を付けた構成セクションでこのパラメータを指定して、デフォルトの構成セクションで指定したパラメータをオーバーライドできます。restrictedURLparamsパラメータ自体はURLで設定できません。

設計上、URLで渡すコマンドライン引数は、formsweb.cfgにある同様の定義よりも必ずオーバーライドします。

この例では、useriduser1/user1pwdとして定義され、debugfalseに設定されています。user1/user1pwdとしてデータベースに接続するように構成されたアプリケーションは、URLパラメータとして追加されたuseridパラメータを持つ別のユーザーとして接続できます。これを回避するには、restrictedURLparamsパラメータでuseridパラメータを定義します。

図-43 restrictedURLparamsパラメータの定義

図-43の説明が続きます
「図-43 restrictedURLparamsパラメータの定義」の説明

同様に、管理者はrestrictedURLparamsパラメータを使用して、制限されたパラメータのうち、使用されたもののリストを表示するページにユーザーをリダイレクトできます。restrictedURLparamsパラメータをallに設定できます。これにより、(構成セクション以外の)パラメータをURLで指定できなくなります。

Oracle Formsテスト・フォームの保護

実行するアプリケーションを指定しないでOracle Forms URLにアクセスすると、テスト・フォームが実行されます。たとえば、通常は次の構文を使ってOracle Formsアプリケーションをコールします。

http://<host>:<port>/forms/frmservlet?config=myApp

Formsサーブレットは、formsweb.cfgファイルで[myApp]を探し出し、該当のアプリケーションを起動します。アプリケーションが指定されないときは、次のようになります。

http://<host>:<port>/forms/frmservlet

Formsサーブレットは、formsweb.cfgファイルのデフォルトのセクションの設定を使用します。これらの設定は、Forms構成ファイルの[default]にあります(アプリケーションがこれらの設定をオーバーライドしない場合は、デフォルトが使用されます)。デフォルトのセクションには、次の設定が含まれます。

form=test.fmx

これは、Oracle Forms Servicesのインストールと構成をテストできるテスト・フォームです。このため、アプリケーションを指定していない場合は、Formsによってtest.fmxファイルが起動します。これを次のように変更できます。

form=

このようにすると、フォームは実行されません。ただし、これは最適ではありません。Formsサーブレットは動的に生成されたHTMLファイルをクライアントに送信するため、ユーザーが情報を勝手に取得することができます。保護を最適にするソリューションは、クライアントに表示される情報HTMLページにリクエストをリダイレクトすることです。formsweb.cfgファイルにあるパラメータをいくつか変更する必要があります。

Oracle Forms Servicesのインストール時に変更するパラメータを、デフォルトの値とともに次に示します。

    # System parameter: default base HTML file
    baseHTML=base.htm
    # System parameter: base HTML file for use with Oracle's Java Plug-In
    baseHTMLjpi=basejpi.htm

これらのパラメータは、クライアントに送信されるHTML情報のテンプレートです。情報HTMLページを作成して、これらの変数をかわりにポイントします。たとえば、$DOMAIN_HOME/config/fmwconfig/components/FORMS/instances/<Forms Instance Name>/serverディレクトリに、次のコンテンツを含むforbidden.htmlという名前の簡単なHTMLページを作成します。

    <html>
      <head>
        <title>Forbidden</title>
      </head>
      <body>
       <h1>Forbidden!</h1>
        <h2>You may not access this Forms application.</h2>
      </body>
    </html>

ノート:

このメッセージ・ページは、クライアント情報のリダイレクトが、リクエストしたコンテンツにアクセス権の制限がある場合にWebサーバーが返すWebページとは異なるために表示されました。

次に、元のパラメータをコメント・アウトまたは変更して、formsweb.cfgパラメータを変更します。

    # System parameter: default base HTML file
    #baseHTML=base.htm
    baseHTML=forbidden.html
    # System parameter: base HTML file for use with Oracle's Java Plug-In
    #baseHTMLjpi=basejpi.htm
    baseHTMLjpi=forbidden.html
    # System parameter: base HTML file for use with Microsoft Internet Explorer
    # (when using the native JVM)

ユーザーが次のURLを入力すると、

http://<host>:<port>/forms/frmservlet

カスタマイズされたWebページが表示されます。formsweb.cfgファイルで該当するパラメータを変更すれば、forbidden.htmlのコンテンツ、ファイル名、および場所などもカスタマイズできます。この情報Webページには、警告、エラー、タイムスタンプ、IPロギングまたは問合せ先などの情報を、サーバー構成への影響を最小限にして格納できます。

ノート:

formsweb.cfgのデフォルト・セクションのベースHTMLテンプレートのエントリをオーバーライドするには、アプリケーション固有の名前が付いた構成に元の値(または他の有効なHTMLファイル)を示す同じエントリを追加する必要があります。

[myApp]
form=myApplication.fmx
lookandfeel=oracle
baseHTML=base.htm
baseHTMLjpi=basejpi.htm

これらのベースHTMLの値を指定していない状態でユーザーによるアプリケーションの実行が発生すると、アプリケーション固有の構成セクションがデフォルト値をオーバーライドしていないのでforbidden.htmlページが表示されます。

formsweb.cfgファイルのセキュリティ処理の向上

ファイル内のすべてのuseridエントリは、サーバーの起動時に自動的に暗号化されます。この機能は、新規インストール時にデフォルトで有効になっています。アップグレード時には、管理者はこの機能を手動で有効にする必要があります。

12.2.1.4より前のバージョンからアップグレードしてuseridパラメータの自動暗号化を有効にする場合は、これらのステップを実行します。ZDTアップグレードを実行する場合、3つのステップをすべて実行します。非ZDTのアップグレードを実行する場合は、ステップ1をスキップして、ステップ2および3を実行してください。
  1. 管理サーバーとForms管理対象サーバーで、forms.userid.encryption.enabledサーバー・パラメータをtrueに設定します。

    『Oracle WebLogic Serverサーバーの起動と停止の管理』ガイドのドメイン全体のサーバー・パラメータのカスタマイズに関する項を参照し、setUserOverridesLate.shファイル(Windowsの場合はsetUserOverridesLate.cmd)を使用してforms.userid.encryption.enabledパラメータを設定します。

  2. WLST (オンライン・モード)を使用して次のコマンドを実行し、FormsアプリケーションのキーストアにアクセスするためのFormsアプリケーション/MBeanへの権限を付与します。
    • 停止時間なし(ZDT)のアップグレード用のコマンド
      grantPermission(codeBaseURL="file:${common.components.home}/../forms/provision/
      forms-config-mbeans.jar",permClass="oracle.security.jps.service.keystore.KeyStoreAccessPermission",
      permTarget="stripeName=formsapp,keystoreName=formsks,alias=*", permActions="*") 
      
      grantPermission(codeBaseURL="file:${domain.home}/servers/${weblogic.Name}/tmp/_WL_user/
      formsapp_12.2.1/-",permClass="oracle.security.jps.service.keystore.KeyStoreAccessPermission", 
      permTarget="stripeName=formsapp,keystoreName=formsks,alias=*",permActions="*")
    • 非ZDTアップグレード用のコマンド
      grantPermission(codeBaseURL="file:${common.components.home}/../forms/provision/
      forms-config-mbeans.jar",permClass="oracle.security.jps.service.keystore.KeyStoreAccessPermission",
      permTarget="stripeName=formsapp,keystoreName=formsks,alias=*", permActions="*")
      grantPermission(codeBaseURL="file:${domain.home}/servers/${weblogic.Name}/
      tmp/_WL_user/formsapp_12.2.1/-",permClass="oracle.security.jps.service.keystore.KeyStoreAccessPermission", 
      permTarget="stripeName=formsapp,keystoreName=formsks,alias=*",permActions="*") 
  3. 管理サーバーとForms管理対象サーバーを再起動します。