プライマリ・コンテンツに移動
Oracle® Database 2日でセキュリティ・ガイド
12c リリース2 (12.1)
B71287-07
目次へ移動
目次
索引へ移動
索引

前
次

3 ユーザー権限の管理

ユーザー権限により、他のユーザー・アカウントの作成やデータベース表の変更などの特定のアクションを実行できるようになります。

トピック:

関連項目:

『Oracle Databaseセキュリティ・ガイド』

権限管理について

ユーザー権限は、様々な方法で管理できます。

  • 個々の権限の付与および取消し。UPDATE SQL文を実行する権限など、個々の権限を個々のユーザーまたはユーザーのグループに付与できます。

  • ロールの作成と権限の割当て。ロールは、ユーザーまたは他のロールに一括で付与する関連権限の名前付きグループです。

  • セキュア・アプリケーション・ロールの作成。セキュア・アプリケーション・ロールを使用すると、データベース・ロールを有効にできるタイミングを制御する条件を定義できます。たとえば、セキュア・アプリケーション・ロールを使用すると、ユーザー・セッションでデータベース・ロールを有効にするのを許可する前に、そのセッションに関連するIPアドレスをチェックできます。

ユーザーに権限を付与する場合

権限は、表の更新や削除など、特定のアクションを実行する権利であるため、データベース・ユーザーには必要以上の権限を付与しないでください。

ユーザー権限とユーザー・ロールの概要は、『Oracle Database 2日でデータベース管理者』を参照してください。『Oracle Database 2日でデータベース管理者』には、権限を付与する方法の例も記載されています。

つまり、最小権限の原則とは、ユーザーに、ジョブを効率よく実行するために実際に必要な権限のみを与えることです。この原則を実践するために、次を可能なかぎり制限してください。

  • データベース・ユーザーに付与するシステムおよびオブジェクト 権限の数

  • データベースにSYS権限で接続するユーザーの数。

たとえば、一般的に、CREATE ANY TABLE権限は、データベース管理者権限を持たないユーザーには付与されません。

権限分析ポリシーを作成すると、Oracle Databaseインストールが複雑でユーザー・アカウントの数が非常に多い場合でも、システム権限およびオブジェクト権限の過度の付与を検出できます。権限分析ポリシーでは、指定された条件に基づいて権限の使用状況が検索され、検索結果がデータ・ディクショナリ・ビューに格納されます。権限分析ポリシーの作成方法の詳細は、『Oracle Database Vault管理者ガイド』を参照してください。

ユーザーにロールを付与する場合

ロールは、ユーザーまたは他のロールに一括で付与する関連権限の名前付きグループです。

ロールの管理の基礎については、Oracle Database 2日でデータベース管理者を参照してください。また、ロールの作成例は、『Oracle Database 2日でデータベース管理者』を参照してください。

ロールとは、ユーザーに権限を素早く簡単に付与するために便利なものです。Oracle Databaseで定義されているロールを使用することもできますが、 必要な権限のみを含む独自のロールを作成すると、より継続的な制御が可能になります。Oracle Database定義ロールの権限は変更または削除される場合があります。たとえばCONNECTロールの場合、現在持っている権限はCREATE SESSION権限のみです。以前は他に8個の権限がありました。

定義したロールに含まれる権限が、特定の職務に必要な権限のみであることを確認します。アプリケーション・ユーザーが既存のロールに組み込まれている権限のすべては必要としていない場合は、適切な権限のみを含む異なるロールのセットを適用してください。または、権限をさらに制限するロールを作成して割り当てます。

CREATE DATABASE LINK権限などの強力な権限を通常のユーザー(SCOTTなど)に付与することは避けてください(特にSCOTTはデフォルト・ユーザー・アカウントとしてよく知られているため、強力な権限を付与することは絶対に避けてください)。かわりに、データベース・ロールに権限を付与してから、その権限を使用する必要があるユーザーにそのロールを付与してください。また、ユーザーが必要とする最小限の権限のみを付与するように注意してください。

セキュア・アプリケーション・ロールによるアプリケーション・アクセスの制御

セキュア・アプリケーション・ロールは、認可されたPL/SQLパッケージによってのみ有効にできるロールです。PL/SQLパッケージ自体は、アプリケーションへのアクセスを制御するために必要なセキュリティ・ポリシーを反映します。

トピック:

セキュア・アプリケーション・ロールについて

セキュア・アプリケーション・ロールは、認可されたPL/SQLパッケージによってのみ有効にできるロールです。

このパッケージは、アプリケーションへのアクセスを制御する1つ以上のセキュリティ・ポリシーを定義します。ロールおよびパッケージは通常、作成者(通常はセキュリティ管理者)のスキーマに作成されます。セキュリティ管理者は、データベースのセキュリティを維持する責任があるデータベース管理者です。

セキュア・アプリケーション・ロールを使用する利点は、ロール自体に付与された権限に加えて、アプリケーション・アクセスにセキュリティの追加レイヤーを作成できることです。セキュア・アプリケーション・ロールがセキュリティを強化する理由として、パスワードがアプリケーション・ソース・コードに埋め込まれたり表に格納されたりしないことがあります。このため、データベースが行う決定はセキュリティ・ポリシーの実装に基づいて行われます。これらの定義はアプリケーションではなくデータベースにまとめて格納されるため、各アプリケーションのポリシーを変更するのではなく、このポリシーを一度に変更します。ポリシーはロールにバインドされているため、データベースに接続しているユーザー数に関係なく、結果は常に同じになります。

セキュア・アプリケーション・ロールには次のコンポーネントがあります。

  • セキュア・アプリケーション・ロール自体。このロールを作成するには、CREATE ROLE文をIDENTIFIED USING句とともに使用してPL/SQLパッケージに関連付けます。次に、一般的にロールに付与する権限をこのロールに付与します。

  • セキュア・アプリケーション・ロールに関連付けるPL/SQLパッケージ、プロシージャまたはファンクション。PL/SQLパッケージは、データベースへのログインを試行する人物にロールを付与またはロールを拒否する条件を設定します。PL/SQLパッケージ、プロシージャまたはファンクションは、定義者の権限ではなく実行者の権限を使用して作成する必要があります。実行者の権限のプロシージャは現行ユーザー(プロシージャを実行するユーザー)の権限で実行されます。このユーザーには、PL/SQLパッケージからアクセスされる、基礎となるオブジェクトに対するEXECUTE権限が付与されている必要があります。実行者の権限のプロシージャは、特定のスキーマにバインドされません。様々なユーザーがこのようなプロシージャを実行でき、集中化されたアプリケーション・ロジックを使用することで複数のユーザーが自身のデータを管理できます。実行者の権限のパッケージを作成するには、プロシージャ・コードの宣言部でAUTHID CURRENT_USER句を使用します。

    ユーザーのロールを有効(または無効)にするために、PL/SQLパッケージにはSET ROLE文またはDBMS_SESSION.SET_ROLEコールも含まれている必要があります。

    PL/SQLパッケージを作成してから、適切なユーザーにパッケージに対するEXECUTE権限を付与する必要があります。

  • ユーザーがログオンしたときにPL/SQLパッケージを実行する方法。PL/SQLパッケージを実行するには、ユーザーがロールによって付与される権限を使用する前に、アプリケーションから直接PL/SQLパッケージをコールする必要があります。ユーザーがログオンしたときにPL/SQLパッケージを自動的に実行するログオン・トリガーは使用できません。

ユーザーがアプリケーションにログインすると、必要に応じて、パッケージ内のポリシーによるチェックが行われます。チェックを通過したユーザーにはロールが付与され、アプリケーションへのアクセスが許可されます。ユーザーがチェックを通過できない場合、アプリケーションへのアクセスは拒否されます。

チュートリアル: セキュア・アプリケーション・ロールの作成

このチュートリアルでは、2人のユーザーMatthew WeissとWinston TaylorがOE.ORDERS表から情報を取得する場合を説明します。

OE.ORDERS表へのアクセス権は、emp_roleセキュア・アプリケーション・ロールで定義されています。MatthewはWinstonのマネージャで、OE.ORDERS表内の情報にアクセスできますが、Winstonは情報にアクセスできません。

トピック:

手順1: このチュートリアルで使用するユーザー・アカウントを作成する

最初の手順として、MatthewとWinstonのユーザー・アカウントを作成します。

MatthewとWinstonは、どちらもHR.EMPLOYEES表の従業員のサンプルです。この表には、従業員のマネージャIDや電子メール・アドレスなどの情報を含む列があります。以降でセキュア・アプリケーション・ロールをテストするため、これら2人の従業員のユーザー・アカウントを作成する必要があります。

ユーザー・アカウントを作成するには、次のようにします。

  1. Enterprise Managerでデータベース・ホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. ターゲット・データベースにアクセスし、ユーザーSYSTEMとしてログインします。

  3. 「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。

  4. 「ユーザー」ページで、「作成」をクリックします。

  5. ユーザーの作成ページで、次の情報を入力します。

    • 名前: mweiss(Matthew Weissのユーザー・アカウントを作成するため)

    • プロファイル: DEFAULT

    • 認証: Password

    • 「パスワードの入力」および「パスワードの確認」: パスワードの作成要件に示されている要件を満たすパスワードを入力します。

    • デフォルト表領域: EXAMPLE

    • 一時表領域: TEMP

    • ステータス: Unlocked

  6. 「システム権限」をクリックします。

  7. 「リストを編集」をクリックします。

  8. システム権限の変更ページの「使用可能なシステム権限」リストからCREATE SESSION権限を選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。

  9. 「OK」をクリックします。

    CREATE SESSIONがユーザーmweissのシステム権限としてリストされた状態で「ユーザーの作成」ページが表示されます。

  10. CREATE SESSIONの「管理者オプション」が選択されていないことを確認し、「OK」をクリックします。

  11. ユーザー・ページのユーザー・リストでユーザーMWEISSの選択ボタンを選択してから、「アクション」リストで「類似作成」を選択します。次に「実行」をクリックします。

  12. 「ユーザーの作成」ページで、次の情報を入力してWinstonのユーザー・アカウントを作成します。このアカウントはMatthewのユーザー・アカウントとほぼ同じになります。

    • 名前: wtaylor

    • 「パスワードの入力」および「パスワードの確認」: パスワードの作成要件に示されている要件を満たすパスワードを入力します。

    ユーザーwtaylorに対し、デフォルト表領域および一時表領域、またはCREATE SESSIONシステム権限を指定する必要はありません。すでに指定されているからです。

  13. 「OK」をクリックします。

これで、Matthew WeissとWinston Taylorの両方にユーザー・アカウントが作成され、同じ権限が与えられました。

手順2: セキュリティ管理者アカウントを作成する

セキュリティを強化するためには、システム管理者に職務を割り当てる際に、責務分離の概念を取り入れる必要があります。

このマニュアルのチュートリアルでは、sec_adminというセキュリティ管理者アカウントを作成し、使用します。

sec_adminセキュリティ管理者アカウントを作成するには、次のようにします。

  1. 「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。

    データベース・ログイン・ページが表示されたら、SYSなどの管理ユーザーとしてログインします。ユーザーSYSは、SYSDBAロールが選択されている状態でログインする必要があります。

  2. 「ユーザー」ページで、「作成」をクリックします。

  3. ユーザーの作成ページで、次の情報を入力します。

    • 名前: sec_admin

    • プロファイル: Default

    • 認証: Password

    • 「パスワードの入力」および「パスワードの確認」: パスワードの作成要件に示されている要件を満たすパスワードを入力します。

    • デフォルト表領域: EXAMPLE

    • 一時表領域: TEMP

    • ステータス: UNLOCKED

  4. 「システム権限」をクリックします。

  5. 「リストを編集」をクリックします。

    「システム権限の変更」ページが表示されます。

  6. 「使用可能なシステム権限」リストから次の権限を選択し、「移動」をクリックしてそれぞれを「選択したシステム権限」リストに移動します。(複数の権限を選択するには、[Ctrl]キーを押したままにします。)

    • CREATE PROCEDURE

    • CREATE ROLE

    • CREATE SESSION

    • INHERIT ANY PRIVILEGES

    • SELECT ANY DICTIONARY

  7. 「OK」をクリックします。

    「ユーザーの作成」ページが表示されます。「管理者オプション」では、ボックスを選択しないでください。

  8. 「OK」をクリックします。

    ユーザー・ページが表示されます。ユーザーsec_adminが「ユーザー名」リストに表示されます。

手順3: 参照ビューを作成する

参照ビューには、より大きな表からの情報のビューが含まれます。参照ビューには、必要な情報のみが含まれます。

このチュートリアルで作成するgrant_emp_roleプロシージャは、従業員ID 100のSteven Kingの直属のマネージャにのみemp_roleを付与します。この情報はHR.EMPLOYEES表にあります。ただし、この表には給与情報などの機密データが含まれており、また、使用した場合すべてのユーザーがアクセスする必要があるため、このプロシージャでは使用できません。実際にはほとんどの場合に、必要な情報のみが含まれている参照ビューを作成します。(参照表を作成することはできますが、ビューに最新データが反映されます。)このチュートリアルでは、従業員の名前、従業員ID、マネージャIDのみを含む独自の参照ビューを作成します。

HR.HR_VERIFY参照ビューを作成するには、次のようにします。

  1. SQL*Plusで、ユーザーHRとして接続します。

    CONNECT HR
    Enter password: password
    

    HRがロックされているというエラー・メッセージが表示された場合は、そのアカウントのロックを解除し、次の文を入力してパスワードをリセットします。セキュリティを向上させるため、以前のリリースのOracle Databaseで使用されたパスワードを再利用しないでください。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

    CONNECT SYSTEM
    Enter password: password
    
    PASSWORD HR
    Changing password for HR
    New password: password
    Retype new password: password
    Password changed.
    
    ALTER USER HR ACCOUNT UNLOCK;
    
    CONNECT HR
    Enter password: password
    
  2. 次のCREATE VIEW SQL文を入力して参照ビューを作成します。

    CREATE VIEW hr_verify AS 
    SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, MANAGER_ID 
    FROM EMPLOYEES;
    
  3. 次のSQL文を入力して、このビューに対するEXECUTE権限をmweisswtaylorおよびsec_adminに付与します。

    GRANT SELECT ON hr_verify TO mweiss;
    GRANT SELECT ON hr_verify TO wtaylor;
    GRANT SELECT ON hr_verify TO sec_admin;

手順4: PL/SQLプロシージャを作成してセキュア・アプリケーション・ロールを設定する

管理アカウントと参照ビューを作成した後、セキュア・アプリケーション・ロールのプロシージャを作成できます。

多くの場合、プロシージャを格納するパッケージを作成しますが、このチュートリアルは、1つのセキュア・アプリケーション・ロールのみをテスト(プロシージャで定義)するシンプルなチュートリアルであるため、プロシージャのみを作成します。複数のプロシージャを作成してロールをテストする場合は、パッケージ内にプロシージャを作成します。この段階でロールは存在しませんが、それでかまいません。ロールは次の手順で作成します。

PL/SQLパッケージを使用すれば、SQL文からアクセスできる特定の関連プロシージャやタイプを、単純で明確なインタフェースとして定義できます。またパッケージを使用することでコードが再利用可能になり、メンテナンスもしやすくなります。パッケージをセキュア・アプリケーション・ロールに使用した場合の利点は、複数のセキュリティ・ポリシーを1つのグループにまとめることで、アプリケーション保護のための堅牢なセキュリティ計画を実装できることです。セキュリティ・ポリシーに失敗したユーザー(潜在的な侵入者)については、監査チェックをパッケージに追加して、その失敗を記録できます。

セキュア・アプリケーション・ロールのプロシージャを作成するには、次のようにします。

  1. Enterprise Managerで「ログアウト」をクリックしてデータベースからログアウトします。

  2. 「確認」ダイアログ・ボックスで「(データベース・インスタンス)のログアウト」を選択し、「ログアウト後にログイン・ページを表示します。」チェック・ボックスを選択します。「ログアウト」をクリックします。

  3. NORMALロールを使用するユーザーsec_adminとしてログインします。

  4. 「スキーマ」メニューから、「プログラム」を選択し、「プロシージャ」を選択します。

  5. プロシージャ・ページで「作成」をクリックします。

  6. プロシージャの作成ページで、次の情報を入力します。

    • 名前: GRANT_EMP_ROLE

    • スキーマ: SEC_ADMIN

    • ソース: 表示された空のプロシージャ・コードを削除してから、次のテキストを入力し、セキュア・アプリケーション・ロールのプロシージャを作成します。

      AUTHID CURRENT_USER
       AS
      v_user varchar2(50); 
      v_manager_id number :=1;
       BEGIN    
        v_user := lower((sys_context ('userenv','session_user')));
        SELECT manager_id 
           INTO v_manager_id FROM hr.hr_verify WHERE lower(email)=v_user;
         IF v_manager_id = 100
          THEN 
           EXECUTE IMMEDIATE 'SET ROLE emp_role';  
          ELSE NULL; 
         END IF;        
        EXCEPTION  
         WHEN NO_DATA_FOUND THEN v_manager_id:=0;  
         DBMS_OUTPUT.PUT_LINE(v_manager_id);
      END;

      次のように指定します。

      • AUTHID CURRENT USER: CREATE PROCEDURE文にAUTHID CURRENT_USER句を追加します。AUTHID CURRENT_USER句を使用すると、実行するユーザーは自信の権限を使用してプロシージャを実行できます。

        プロシージャを機能させるには、実行者の権限を使用するプロシージャを作成する必要があります。実行者の権限は、プロシージャがアクセスするすべてのオブジェクトに対するEXECUTE権限をユーザーに与えます。

        実行者の権限のプロシージャ内で有効になっているロールは、プロシージャが終了した後でも有効なままですが、ユーザーは、セッションを終了するとセキュア・アプリケーション・ロールに関連付けられている権限を失います。この場合は、セッションの残りでロールを有効にする専用プロシージャを持つことができます。

        ユーザーは、定義者権限のプロシージャ内のセキュリティ・ドメインを変更できないため、セキュア・アプリケーション・ロールは実行者権限のプロシージャ内でのみ有効になります。

        実行者の権限を使用したプロシージャの作成についての重要性は、「セキュア・アプリケーション・ロールについて」を参照してください。

      • v_user varchar2(50): ユーザーのセッション情報を格納するv_user変数を宣言します。

      • v_manager_id number :=1: v_userユーザーのマネージャIDを格納するv_manager_id変数を宣言します。

      • v_user := lower...: ログオンするユーザーのユーザー・セッション情報を取得します(この場合はMatthewまたはWinston)。ユーザー・セッション情報を取得するには、SQLファンクションSYS_CONTEXTをネームスペース属性USERENV('userenv'、session_attribute)とともに使用して、この情報をv_user変数に書き込みます。

        このファンクションから返される情報は、ユーザーが認証された方法、クライアントのIPアドレスおよびユーザーがプロキシを介して接続したかどうかを示します。SYS_CONTEXTの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

      • SELECT manager_id ... INTO...: 現行ユーザーのマネージャIDを取得します。SELECT文によって、マネージャIDがv_manager_id変数にコピーされ、HR.HR_VERIFYビューで現行ユーザーのマネージャIDがチェックされます。従業員の電子メール・アドレスはユーザー名と同じであるため、この例では従業員の電子メール・アドレスを使用します。

      • IF ... THEN ... END IF: IF条件を使用して、ユーザーにgrant_emp_roleロールを付与すべきかどうかをテストします。この例の場合は、MatthewのマネージャであるSteven King(従業員番号は100)に報告を行うかどうかが条件となります。Matthewのように、Kingに報告を行う場合、ユーザーにはセキュア・アプリケーション・ロールが付与されます。報告を行わない場合は、ロールは付与されません。

        結果として、Matthew WeissはSteven Kingの直属の部下であるためセキュア・アプリケーション・ロールを付与されますが、WinstonはSteven Kingの直属の部下ではないためロールは付与されません。

      • THEN ... ELSE NULL: IF条件内では、THEN条件によってSET ROLE文がすぐに実行され、ロールが付与されます。これが実行されない場合は、ELSE条件により、権限付与が拒否されます。

      • EXCEPTION: データが検出されない場合は、EXCEPTION文を使用してv_manager_id0に設定します。

      • DBMS_OUTPUT.PUT_LINE: マネージャID (ここでは0)をバッファにコピーしてすぐに使用できるようにします。

  7. 「OK」をクリックします。

    ヒント:

    PL/SQLコードの作成時または実行時に問題が発生した場合は、Oracle Databaseのトレース・ファイルを確認してください。USER_DUMP_DEST初期化パラメータにトレース・ファイルの現在の位置が示されます。このパラメータの値は、SQL*PlusでSHOW PARAMETER USER_DUMP_DESTを発行して確認できます。トレース・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

手順5: セキュア・アプリケーション・ロールを作成する

セキュア・アプリケーション・ロールを設定するPL/SQLプロシージャを作成した後、セキュア・アプリケーション・ロールemp_roleを作成できます。

セキュア・アプリケーション・ロールを作成するには、次のようにします。

  1. sec_adminユーザーとしてログインしたままであることを確認します。

  2. 「管理」メニューから、「セキュリティ」を選択し、「ロール」を選択します。

  3. ロール・ページで、「作成」をクリックします。

  4. ロールの作成ページで、次の情報を入力します。

  5. 「プロシージャ」オプションを選択します。

  6. 「プロシージャ名」フィールドにSEC_ADMIN.GRANT_EMP_ROLEと入力します。

  7. 「OK」をクリックします。

手順6: EMP_ROLEロールへのOE.ORDERS表に対するSELECTの付与

OE.ORDERS表を所有するユーザーOEは、ORDERS表に対するSELECT権限をemp_roleロールに付与する必要があります。

これにより、emp_roleロールの使用を認可された任意のユーザーに、OE.ORDERS表から選択する権限が与えられます。

EMP_ROLEにOE.ORDERS表に対するSELECT権限を付与する手順:

  1. ユーザーOEとして接続します。

    CONNECT OE
    Enter password: password
    

    OEがロックされているというエラー・メッセージが表示された場合は、OEアカウントのロックを解除し、次の文を入力してパスワードをリセットします。セキュリティを向上させるため、以前のリリースのOracle Databaseで使用されたパスワードを再利用しないでください。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

    CONNECT SYSTEM
    Enter password: sys_password
    
    PASSWORD OE  -- First, change the OE account password.
    Changing password for OE
    New password: password
    Retype new password: password
    Password changed.
    
    ALTER USER OE ACCOUNT UNLOCK; -- Next, unlock the OE account.
    

    次の構文を使用して、ユーザー・アカウントのロック解除と新規パスワードの作成する方法もあります。

    ALTER USER account_name ACCOUNT UNLOCK IDENTIFIED BY new_password:
    

    これで、ユーザーOEとして接続できます。

    CONNECT OE 
    Enter password: password
    
  2. 次の文を入力して、OE.ORDERS表に対するSELECT権限をemp_roleロールに付与します。

    GRANT SELECT ON ORDERS TO emp_role;
    

    ロールは、直接ユーザーに付与しないでください。ユーザーがセキュリティ・ポリシーに合格したと想定して、PL/SQLパッケージが付与の処理を実行します。

手順7: MatthewとWinstonにこのプロシージャのEXECUTE権限を付与する

この段階で、MatthewとWinstonはOE.ORDERS表にアクセスを試行できますが、アクセスはできません。

次のステップは、彼らにgrant_emp_roleプロシージャに対するEXECUTE権限を付与してgrant_emp_roleプロシージャを実行できるようにし、OE.ORDERS表から選択しようとしたときにアクセスが許可または拒否されるようにすることです。

grant_emp_roleプロシージャに対するEXECUTE権限を付与するには、次のようにします。

  1. SQL*Plusで、sec_adminユーザーとしてログインします。

    connect sec_admin
    Enter password: password
    
  2. ユーザーmweissとwtaylorで、次のGRANT SQL文を実行します。

    GRANT EXECUTE ON grant_emp_role TO mweiss;
    GRANT EXECUTE ON grant_emp_role TO wtaylor;

手順8: EMP_ROLEセキュア・アプリケーション・ロールのテスト

MatthewとWinstonとしてログオンし、OE.ORDERS表にアクセスを試行して、emp_roleセキュア・アプリケーション・ロールをテストする準備ができました。

MatthewとWinstonがログオンすると、OE.ORDERS表でSELECT文を発行する前に、grant_emp_roleプロシージャが実行されてロールの検証が行われます。

トピック:

emp_roleセキュア・アプリケーション・ロールをユーザーMWEISSとしてテストする

SQL*Plusを使用して、mweissユーザーとしてデータベースに接続できます。

ユーザーMWEISSとしてemp_roleセキュア・アプリケーション・ロールをテストするには、次の手順を実行します。

  1. SQL*Plusで、mweissユーザーとして接続します。

    CONNECT mweiss
    Enter password: password
    
  2. 次のSQL文を入力してgrant_emp_roleプロシージャを実行します。

    EXEC sec_admin.grant_emp_role;
    

    この文により、現行セッションに対してgrant_emp_roleプロシージャが実行されます。(実際のシナリオでは、ユーザーがアプリケーションにログインしたときに、この文は自動的に実行されます)。

  3. OE.ORDERSで次のSELECT文を実行します。

    SELECT COUNT(*) FROM OE.ORDERS;
    

    MatthewにはOE.ORDERS表へのアクセス権があります。

      COUNT(*)
    ----------
           105
    
emp_roleセキュア・アプリケーション・ロールをユーザーWTAYLORとしてテストする

次に、Winstonがセキュア・アプリケーションへのアクセスを試みます。

ユーザーWTAYLORとしてemp_roleセキュア・アプリケーション・ロールをテストするには、次の手順を実行します。

  1. SQL*Plusでユーザーwtaylorとして接続します。

    CONNECT wtaylor
    Enter password: password
    
  2. 次のSQL文を入力してgrant_emp_roleプロシージャを実行します。

    EXEC sec_admin.grant_emp_role;
    

    この文により、現行セッションに対してgrant_emp_roleプロシージャが実行されます。

  3. OE.ORDERSで次のSELECT文を実行します。

    SELECT COUNT(*) FROM OE.ORDERS;
    
    ERROR at line 1:
    ORA-00942: table or view does not exist
    

    WinstonはSteven Kingに直接報告を行わないため、OE.ORDERS表へのアクセス権がありません。SELECT文を実行した場合でも、ORDERS表に含まれる実際の注文数はわかりません。

手順9: このチュートリアルで使用したコンポーネントを削除する(オプション)

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

コンポーネントを削除するするには、次のようにします。

  1. SQL*PlusでユーザーSYSTEMとして接続します。

    CONNECT SYSTEM
    Enter password: password
    
  2. 次のDROP文を入力します。

    DROP USER mweiss;
    DROP USER wtaylor;
    

    ユーザーsec_adminは削除しないでください。このマニュアルの以降のチュートリアルで、このユーザー・アカウントが必要になります。

  3. SQL*Plusでユーザーsec_adminとして接続します。

    CONNECT sec_admin
    Enter password: password
    
  4. 次のDROP SQL文を入力します。

    DROP ROLE emp_role;
    DROP PROCEDURE grant_emp_role;
    
  5. ユーザーHRとして接続してから、HR_VERIFYビューを削除します。

    CONNECT HR
    Enter password: password
    DROP VIEW hr_verify;
    
  6. SQL*Plusを終了します。

    EXIT

権限セキュリティに使用される初期化パラメータ

Oracle Databaseでは、権限のセキュリティを構成するための初期化パラメータのセットが提供されています。

表3-1に、ユーザー権限を保護するために使用する初期化パラメータを示します。

表3-1 権限セキュリティに使用される初期化パラメータ

初期化パラメータ デフォルト設定 説明

O7_DICTIONARY_ACCESSIBILITY

FALSE

SYSTEM権限に対する制限を制御します。このパラメータの詳細は、データ・ディクショナリ保護の有効化を参照してください。

OS_ROLES

FALSE

オペレーティング・システムが各ユーザーのロールを識別および管理するかどうかを決定します。

MAX_ENABLED_ROLES

30

他のロールに含まれるロールを含め、ユーザーが有効にできるデータベース・ロールの最大数を指定します。

REMOTE_OS_ROLES

FALSE

オペレーティング・システム・ロールがリモート・クライアントに対して許可されるかどうかを指定します。デフォルト値のFALSEを指定すると、Oracleでリモート・クライアントのロールが識別および管理されます。

SQL92_SECURITY

FALSE

UPDATE文やDELETE文などを実行するためにユーザーにSELECTオブジェクト権限が付与されている必要があるかどうかを指定します。

初期化パラメータを変更するには、初期化パラメータ値の変更を参照してください。初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Database管理者ガイド』を参照してください。