Oracle
如何讓新使用者看到現有模式中的表
我是 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
。然後,您可以簡單地將這個角色授予其他使用者。這需要開發人員的一些自律,但我看到他們中的一些人遵循這種方法。