--Criar o Novo Usuário

CREATE USER NOVO_USUARIO IDENTIFIED BY "6R7CCA5AUTA";

-- Concede o privilégio de login ao usuário

GRANT CREATE SESSION TO NOVO_USUARIO;

-- Define a senha para nunca expirar

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

 

-- Conceder Perfis (SOMENTE LEITURA)

DECLARE

    v_old_user VARCHAR2(30) := 'ANTIGO_USUARIO';  -- Substitua pelo nome do usuário antigo

    v_new_user VARCHAR2(30) := 'NOVO_USUARIO';    -- Substitua pelo nome do novo usuário

BEGIN

    FOR rec IN (

        SELECT 'GRANT SELECT ON ' || owner || '.' || table_name || ' TO ' || v_new_user AS grant_stmt

        FROM all_tables

        WHERE owner = v_old_user

        UNION ALL

        SELECT 'GRANT SELECT ON ' || owner || '.' || view_name || ' TO ' || v_new_user

        FROM all_views

        WHERE owner = v_old_user

    ) LOOP

        BEGIN

            EXECUTE IMMEDIATE rec.grant_stmt;

        EXCEPTION

            WHEN OTHERS THEN

                DBMS_OUTPUT.PUT_LINE('Erro ao conceder permissão: ' || SQLERRM);

                -- Opcional: você pode também logar `rec.grant_stmt` para saber qual permissão falhou

        END;

    END LOOP;

 

    DBMS_OUTPUT.PUT_LINE('Permissões de leitura copiadas com sucesso de ' || v_old_user || ' para ' || v_new_user);

END;

/

 

 

 

--------------------------------------- QUERENDO AUMENTAR O ACESSO DO NOVO_USUARIO ---------------------------------

-- Conceder Privilégios de Sistema

BEGIN

    FOR r IN (SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ANTIGO_USUARIO') LOOP

        EXECUTE IMMEDIATE 'GRANT ' || r.PRIVILEGE || ' TO NOVO_USUARIO';

    END LOOP;

END;

/

 

-- Conceder Privilégios de Objeto

BEGIN

    FOR r IN (SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ANTIGO_USUARIO') LOOP

        EXECUTE IMMEDIATE 'GRANT ' || r.PRIVILEGE || ' ON ' || r.OWNER || '.' || r.TABLE_NAME || ' TO NOVO_USUARIO';

    END LOOP;

END;

/

 

--Conceder Roles

BEGIN

    FOR r IN (SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'ANTIGO_USUARIO') LOOP

        EXECUTE IMMEDIATE 'GRANT ' || r.GRANTED_ROLE || ' TO NOVO_USUARIO';

    END LOOP;

END;

/