--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;
/