Oracle

如何讓新使用者看到現有模式中的表

  • November 2, 2018

我是 Oracle 的新手,所以這個問題可能很愚蠢。我創建了新使用者,現在我希望他在已經存在的模式(在本例中為 hr 模式)中查看表(甚至通過一個命令更好地查看所有表)。甚至可能嗎?

根據我的理解,數據庫儲存數據並且模式等於使用者,所以兩個使用者可以看到儲存在數據庫中的相同數據,就像我的情況一樣?

以 HR 使用者身份登錄並執行以下語句(首先將 OTHER_USER 替換為實際使用者名):

select 'GRANT SELECT ON ' || table_name || ' TO OTHER_USER;' from user_tables;

然後複製輸出,粘貼並以 HR 使用者身份執行。

這是甲骨文在很久以前就可以解決的問題。沒有簡單的命令可以做到這一點,所以通常我們只需遍歷表並授予對象級權限:

set serveroutput on
declare
 l_cmd clob;
begin
 for t in (select * from all_tables where owner = 'HR')
 loop
   begin
     l_cmd := 'grant select on "' || t.owner || '"."' || t.table_name || '" to new_user';
     execute immediate l_cmd;
     exception when others then dbms_output.put_line(l_cmd);
   end;
 end loop;
end;
/

此後在 HR 模式中創建的表對其他使用者將不可見,每次創建對象時,都應授予該對象的權限。

更好的解決方案是創建一個角色,比方說HR_READONLY,每次在 HR 模式中創建一個新表時,都應該授予該對象的權限HR_READONLY。然後,您可以簡單地將這個角色授予其他使用者。這需要開發人員的一些自律,但我看到他們中的一些人遵循這種方法。

引用自:https://dba.stackexchange.com/questions/221645