0

FOOユーザーに属するストアドプロシージャがありますA。ユーザーBにはEXECUTE権限がありFOOます。

の手順の1つはFOO、DBリンクを使用してからデータを取得しますBARTABLE@REMOTEDB。 ユーザーとして接続AするためのDBリンクがあり、ユーザーとして接続するのと同じ名前のDBLinkがあります。REMOTEDBAREMOTEBREMOTEDBBREMOTE

B実行時FOOに、AのDBリンク(として接続AREMOTE)またはBのDBリンク(として接続BREMOTE)を使用しますか?

EXECUTE特定のユーザーに属するプロシージャは、別のユーザーがそのプロシージャを使用している場合でも、そのユーザーのdblinkにしかアクセスできないと想定したためです。しかし、どういうわけか、ユーザーAREMOTEがを持っていなくてSELECTも、この手順は正しく機能してBARTABLE@REMOTEDBいるので、私は混乱しています。

4

1 に答える 1

2

この手順では、A のリンクに定義されている dblink を使用する必要があります。オラクル手順は、その手順が「実行者の権利」で定義されている場合を除き、所有者の権利を使用して処理します。実行者の権利

プロシージャに対して定義された実行者の権限は、コードの所有者ではなく、呼び出し元のユーザーにローカルな権限とオブジェクトを使用するようにコードに指示します。これがデフォルトで行われない理由は、通常、エンド ユーザーは直接更新するためのハード オブジェクトに対する権利を持たないためですが、API を介して適切なアクセスが与えられ、更新、挿入、削除に正しいビジネス ロジックが適用されます。これらのオブジェクトは、エンド ユーザーがアクセスできるものとして公開されます。

于 2010-06-30T20:16:26.137 に答える