Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー データベース管理 » データベース設定 » ユーザー ID、権限、パーミッション

 

ネストオブジェクトの所有権

ビューとプロシージャーは、さまざまなユーザーが所有する基本のオブジェクトにアクセスできます。たとえば、usera、userb、userc、userd が別々の 4 名のユーザーである場合は、userc.viewc から userd.viewd を作成できます。この userc.viewc は、usera.table から作成された userb.viewb をベースにして作成できます。同じように、プロシージャーでも、userd.procd は userc.procc を呼び出すことができ、userc.procc は、usera.tablea に挿入できる userb.procb を呼び出すことができます。

ネストされたビューおよびテーブルには、次の DAC (任意アクセス制御) 規則が適用されます。

  • ビューを作成するには、ユーザーは、そのビューに含まれるすべてのベースオブジェクト (テーブルやビューなど) に対する SELECT パーミッションが必要です。

  • ビューにアクセスするには、ビューの所有者は、基本のテーブルまたはビューに対する適切なパーミッションを GRANT オプションで付与されている必要があります。また、ユーザーは、ビューに対する適切なパーミッションを付与されている必要があります。

  • WHERE 句を使用して更新するには、SELECT パーミッションと UPDATE パーミッションの両方が必要です。

  • ユーザーがビュー定義内のテーブルを所有している場合は、そのユーザーがビューの所有者ではなく、ビューに対するアクセス権を付与されていなくても、ビューを介してテーブルにアクセスできます。

ネストされたプロシージャーには、次の DAC 規則が適用されます。

  • プロシージャーを作成する場合、ユーザーは、基本となるオブジェクト (たとえば、テーブル、ビュー、またはプロシージャー) に対するパーミッションを必要としません。

  • プロシージャーを実行する場合、プロシージャーの所有者は、そのプロシージャーが参照するオブジェクトに対する適切なパーミッションを必要とします。

  • プロシージャーによって参照されるすべてのテーブルをユーザーが所有する場合でも、プロシージャーに対する EXECUTE パーミッションを付与されていないかぎり、プロシージャーを実行してテーブルにアクセスすることはできません。

この動作については、次の例で説明します。


例 1:user1 が table1 を作成し、user2 が table1 に基づく view2 を作成する
例 2:user2 が table1 にアクセスする procedure2 を作成する
例 3:user1 が table1 を作成し、user2 が table2 を作成し、user3 が table1 と table2 をジョインする view3 を作成する