您不能授予僅適用於一個其他架構的權限。您將不得不授予任何 - 即使是暫時的,例如在創建/修改主A模式期間,減少安全影響 - 並在擁有特權時在其他B用戶的模式中創建所有同義詞。否則,用戶B必須自己創建同義詞;或者用戶A可以創建公共同義詞。
作爲替代有任何同義詞,你可以有用戶B開關模式的有:
alter session set current_schema = A;
然後他們可以指的對象,而不必用模式名前綴他們,雖然他們那麼在他們自己的模式中看不到任何對象,而沒有爲它們加上前綴 - 它聽起來不像B會有對象但很難說。
您還可以通過登錄觸發器自動執行模式開關:
create or replace trigger ramread_logon_trigger
after logon on database
begin
if user = 'B' then
execute immediate 'alter session set current_schema = A';
end if;
end;
/
如果你確實有多個用戶可以使用一個角色,而是和開關架構具有該角色的任何用戶,通過測試dbms_session.is_role_enabled
。同一個角色可以被授予訪問A的對象的必要權限,您需要以某種方式授予這些對象 - 同義詞本身並不賦予任何訪問權限。
你試圖完成的東西似乎沒有道理。如果'B'擁有該表,爲什麼要在'B'模式中創建一個私有同義詞?該同義詞只能由'B'使用,根據定義,它已經可以訪問基礎表。 'A'永遠不能使用模式'B'中定義的私有同義詞(因此名稱爲private)。如果你想創建一個私有的同義詞,只有在模式「A」中創建它纔有意義。或者你想創建一個公共同義詞。 –