Allenというユーザーが、Allen.BaseTableというテーブルとそのテーブルのAllen.ViewAというビューの2つのオブジェクトを作成したと想定します。システムは、Allen.BaseTableの作成時に、AllenがViewAに対するSELECT権限を持っているかどうかを検証します。
さらに、AllenがBobbyというユーザーに、ViewAに対するSELECT権限を与えたと想定します。Bobbyは次に、Bobby.ViewBを参照するAllen.ViewAを作成します。構文解析プログラムは、Allen.ViewAの作成時に、BobbyがBobby.ViewBに対するSELECT権限を持っているかどうかを検証します。
このプロセスをまとめると、次のようになります。
- Allenが、基本テーブルAllen.BaseTableを作成する。
- Allenが、Allen.BaseTableを参照するビューAllen.ViewAを作成する。
Allenは、Allen.BaseTableに対するSELECT権限を持っている。
- Allenが、Allen.ViewAに対するSELECT権限をBobbyに付与する。
- Bobbyが、Allen.ViewAを参照するBobby.ViewBを作成する。
Bobbyは、Allen.ViewAに対するSELECT権限を持っている。
BobbyはChuckというユーザーに、Bobby.ViewBに対するSELECT権限を与えるとします。Bobbyは権限をChuckに付与できますが、AllenがAllen.ViewAに対するSELECT権限をWITH GRANT OPTION付きでBobbyに付与しない限り、Chuckは問合わせでビューを使用できません。
マクロがその作成者以外のユーザーにより所有されているオブジェクトを参照する場合も、同じ権限が必要です。例えば、マクロBobby.MacroBが、Allen.ViewAから行を削除するとします。
他のユーザーは、BobbyがBobby.MacroBに対するWITH GRANT OPTION付きのEXECUTE権限を持っていない限り、Bobby.MacroBを実行できません。