Oracleの異なるユーザーの下で、誰かが同じ機能の異なる動作を説明できますか?
質問
私はAと呼ばれるパッケージを持っています、Aは関数dosomething()を持っています。
ユーザーXはAの所有者です。ユーザーYには、XAを指す同義語TestSynがあります。
xと実行された関数としてログインしましたdosomething()はtrueを返しますが、ユーザーyとしてログインし、testsyn.dosomething()のような関数を実行すると、同じ値に対してfalseを返します。
なぜこれが起こるのかを誰かが説明してもらえますか?
解決
手順の定義をご覧ください。それがどちらか PROCEDURE a AUTHID CURRENT_USER
その後、で実行されます 現在のユーザーの許可と名前の解決. 。手順でユーザーの特権を考慮に入れるビューを使用する場合( user_objects
)、それは異なる結果を説明することができます。
コメントの回答:あなたは間違った区別をしています。戻る手順を書くと想像してください object_name
からの最初の行の user_objects
. 。その手順は所有されています schema_owner
と schema_invoker
それを実行する許可があります。手順が定義されていない場合 AUTHID CURRENT_USER
, 、それはのオブジェクトのオブジェクト名を返します schema_owner
スキーマ。で同じ手順 AUTHID CURRENT_USER
からオブジェクト名を返します schema_invoker
代わりにスキーマ。これは、実行特権とは何の関係もありません。
これがあなたの問題の原因であることはわかりませんが、それは良い候補者であり、簡単に確認できます(パッケージ仕様にある手順の定義を見てください)。
他のヒント
その関数を実行することはできますが、関数参照のすべてのオブジェクトにアクセス権がない場合があります。手始めに、私はあなたの関数にアクセスするDBオブジェクトを把握し、SQLPLUSのようなツールからアクセスして確認しようとします。