有讓 A Owner 使用 All Owner 的所有 Object 的語法: 點選此處,
但是, 若只是要讓 A Owner 使用 B Owner 的所有 Object,
而假設 B Owner 有 1000 個 Object,
若透過 Grant 一行一行授權, 則 1000 個 Object 就要執行授權 1000 次,
會令人受不了的,
所以, 解決方式, 就是用動態 SQL 做批次授權, 可以參考如下喔.
步驟 1) 用 DBA Owner 或 B Owner 登入某個 SQL Tools (如: Oracle SQL Developer),
步驟 2) 執行下面語法, 透過動態 SQL, 進行授權即可 :
程式碼
DECLARE
V_GRANT_ON_OWNER VARCHAR2(30) := 'B_OwnerName';
V_GRANT_TO_OWNER VARCHAR2(30) := 'A_OwnerName';
-- 查詢來源的所有物件
CURSOR CUR_DATA IS
SELECT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_NAME NOT IN '/'
AND OBJECT_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION', 'TABLE', 'VIEW');
BEGIN
FOR REC_DATA IN CUR_DATA LOOP
-- 動態 SQL 進行授權
EXECUTE IMMEDIATE 'GRANT ALL ON '
|| V_GRANT_ON_OWNER || '.' || REC_DATA.OBJECT_NAME
|| ' TO '
||V_GRANT_TO_OWNER;
END LOOP;
END;
如此, 是不是很方便又快速達到我們要的需求了.
