Oracle DB 讓 A Owner 可使用 B Owner 的 All Object

在 Oracle Database 中,

有讓 A Owner 使用 All Owner 的所有 Object 的語法: 點選此處,

但是, 若只是要讓 A Owner 使用 B Owner 的所有 Object,

而假設 B Owner 有 1000 個 Object,

若透過 Grant 一行一行授權, 則 1000 個 Object 就要執行授權 1000 次,

會令人受不了的,


所以, 解決方式, 就是用動態 SQL 做批次授權, 可以參考如下喔.

步驟 1) 用 DBA OwnerB 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;

如此, 是不是很方便又快速達到我們要的需求了.


Related Posts Plugin for WordPress, Blogger...