私のチームは、Oracle Membership Provider を使用して、.NET 4、MVC3 Web アプリケーションのユーザーを管理しています。最近、クライアントが、オブジェクトを所有するスキーマが、Web アプリがデータベースへの接続に使用するスキーマ/ユーザーとは異なると主張していることを発見しました。2 番目のスキーマにアクセス許可を付与することは問題ではありませんが、テーブル、関数などを接続しているユーザーとは異なるスキーマを参照するようにメンバーシップ プロバイダーを構成するにはどうすればよいでしょうか?
1 に答える
0
同義語が唯一の答えのようです。メンバーシップ プロバイダーのすべての機能を使用しているわけではありませんが、必要なシノニムを生成するには次のクエリで十分なようです。
DECLARE
CURSOR ora_obj_rows IS (SELECT * FROM ALL_OBJECTS WHERE OWNER = '&owner_user' AND OBJECT_NAME LIKE 'ORA_ASPNET%' AND OBJECT_TYPE IN ('TABLE', 'PACKAGE', 'FUNCTION'));
BEGIN
FOR ora_obj IN ora_obj_rows
LOOP
EXECUTE IMMEDIATE 'CREATE SYNONYM "' || '&login_user' || '"."' || ora_obj.OBJECT_NAME || '" FOR "' || '&owner_user' || '"."' || ora_obj.OBJECT_NAME || '"';
END LOOP;
END;
/
&owner_user
および&login_user
は、実行時に入力されるパラメーターです。(スクリプトを使用しているため、DEFINE
上記のとおりです。) このクエリを実行するユーザーは、ALL_OBJECTS 内のオブジェクトを表示できる必要があり、ログイン ユーザーに SYNONYM を作成する権限が必要です。さらに、これらのオブジェクトに対して適切な読み取りおよび書き込み権限を付与する必要があります。
他の誰かがより良いものを持っている場合は、喜んで回答としてマークします。
于 2012-09-19T22:41:33.987 に答える